actionBarのテキストの色を変更する方法私はHolo Lightテーマを継承しています。ActionBarの背景を変更することはできますが、Tweakのテキストの色を変更するための属性が何であるかわかりません。
わかりました、Android:textColorPrimary属性でテキストの色を変更できますが、ActionBarボタンでオーバーフローが発生したときに表示されるドロップダウンメニューのテキストの色も変更できます。ドロップダウンメニュー/リストの色を変更するにはどうすればいいですか?
わかりました、私はもっと良い方法を見つけました。私は今タイトルの色だけを変えることができます。字幕を微調整することもできます。
これが私のstyles.xmlです:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="@Android:style/Theme.Holo.Light">
<item name="Android:actionBarStyle">@style/MyTheme.ActionBarStyle</item>
</style>
<style name="MyTheme.ActionBarStyle" parent="@Android:style/Widget.Holo.Light.ActionBar">
<item name="Android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
</style>
<style name="MyTheme.ActionBar.TitleTextStyle" parent="@Android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="Android:textColor">@color/red</item>
</style>
</resources>
私はあなたと同じ問題を抱えていました、それはHolo.Lightテーマですが、私はActionBarカラーをスタイルしたかったので、私は同様にテキストカラーとタイトルとメニューの両方を変更する必要がありました。だから最後にgit hubに行き、正しいスタイルが見つかるまでソースコードを見ました。
<?xml version="1.0" encoding="utf-8"?>
<!-- For honeycomb and up -->
<resources>
<style name="myTheme" parent="@Android:style/Theme.Holo.Light">
<item name="Android:actionBarStyle">@style/myTheme.ActionBar</item>
<item name="Android:actionMenuTextColor">@color/actionBarText</item>
</style>
<style name="myTheme.ActionBar" parent="@Android:style/Widget.Holo.Light.ActionBar">
<item name="Android:background">@drawable/actionbarbground</item>
<item name="Android:titleTextStyle">@style/myTheme.ActionBar.Text</item>
</style>
<style name="myTheme.ActionBar.Text" parent="@Android:style/TextAppearance">
<item name="Android:textColor">@color/actionBarText</item>
</style>
</resources>
だから今あなたがしなければならないすべてはあなたが望む@color/actionBarText
と@drawable/actionbarbground
に設定することです!
私はどんな種類のActionBar
(Sherlock、Compat、およびNativeでうまく動作する方法を見つけました。 :
htmlを使ってタイトルを設定し、テキストの色を指定するだけです。たとえば、ActionBarのテキストの色を赤に設定するには、次のようにします。
getActionBar()/* or getSupportActionBar() */.setTitle(Html.fromHtml("<font color=\"red\">" + getString(R.string.app_name) + "</font>"));
Wordのred
の代わりに赤い16進コード#FF0000
を使用することもできます。これに問題がある場合は、 を参照してください。Android Html.fromHtml(String)は<font color = '#'>テキスト</font>では機能しません .
さらに、カラーリソースを使用したい場合は、このコードを使用して正しいHEXストリングを取得し、必要に応じてアルファを除去することができます(フォントタグはアルファをサポートしていません)。
int orange = getResources().getColor(R.color.orange);
String htmlColor = String.format(Locale.US, "#%06X", (0xFFFFFF & Color.argb(0, Color.red(orange), Color.green(orange), Color.blue(orange))));
ActionBar IDは直接利用できないので、ここで少しハッキングする必要があります。
int actionBarTitleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "Android");
if (actionBarTitleId > 0) {
TextView title = (TextView) findViewById(actionBarTitleId);
if (title != null) {
title.setTextColor(Color.RED);
}
}
これは古い話題ですが、将来の読者のために、ToolBarを使用するとすべてが非常に簡単になります。
Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.someColor));
setSupportActionBar(toolbar);
私は簡単な一行コードでやった
actionBar.setTitle(Html.fromHtml("<font color='#ff0000'>ActionBartitle </font>"));
それをアクションバーのルートに追加します。私はこの問題を抱えていました。
<style name="ActionBar" parent="@style/Theme.AppCompat.Light">
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="actionMenuTextColor">@color/stdDarkBlueText</item>
</style>
<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<item name="titleTextStyle">@style/ActionBarTitleText</item>
<item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>
<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="Android:textColor">@color/stdDarkBlueText</item>
<item name="Android:textSize">12sp</item>
</style>
<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
<item name="Android:textColor">@color/stdDarkBlueText</item>
<item name="Android:textSize">12sp</item>
</style>
actionMenuTextColor - アクションバーのテキストの色を変更します。Widget.Styled.ActionBar
の一部であったときは機能しませんでしたので、ルートに追加する必要がありました。他の2つの属性は、アクションバーのタイトルと字幕を変更します。
アクションバーにHTML文字列を設定しても、SDK v21以降のMaterialテーマでは機能しません
変更したい場合は、style.xmlでプライマリテキストの色を設定する必要があります。
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Android:Theme.Material.Light">
<!-- Customize your theme here. -->
<item name="Android:textColorPrimary">@color/actionbar-text-color</item>
</style>
</resources>
字幕をスタイルしたい場合は、これをカスタムスタイルに追加するだけです。
<item name="Android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
AppCompat
ライブラリに対して同じ結果を得ようとしている人、それからこれが私が使ったものです:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomActivityTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="Android:actionBarStyle">@style/MyActionBar</item>
<item name="actionBarStyle">@style/MyActionBar</item>
<!-- other activity and action bar styles here -->
</style>
<!-- style for the action bar backgrounds -->
<style name="MyActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="Android:background">@drawable/actionbar_background</item>
<item name="background">@drawable/actionbar_background</item>
<item name="Android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
<item name="Android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
<item name="titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
<item name="subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
</style>
<style name="MyTheme.ActionBar.TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="Android:textColor">@color/color_title</item>
</style>
</resources>
最も簡単な方法は、これをstyles.xmlで行うことです。
Googleのテンプレートstyles.xmlは現在以下を生成します。
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
図のように終了タグの前にもう1行追加すると、テキストの色はDark ActionBarの場合の色に変わります。
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>
色を他の色にカスタマイズしたい場合は、colors.xmlで独自の色を指定するか、またはAndroid:textColorPrimary属性を使用してAndroidの組み込み色を使用することもできます。
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarTheme">@style/AppTheme.AppBarOverlay</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="Android:textColorPrimary">@Android:color/darker_gray</item>
</style>
注:これにより、タイトルの色と、アクションバーに表示されているすべてのMenuItemのタイトルも変わります。
API> = 21であなた自身のレイアウトを作成せずにうまくやる方法を見つけました。
それはテキストを色付けし、アクションバー内のドロウアブルをコントロールするだけです。
それが誰かに役立つことを願っています。
<!--Material design primary colors-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
<item name="Android:navigationBarColor">@color/primary_dark</item>
<item name="actionBarTheme">@style/AppBaseTheme.Toolbar</item>
</style>
<!--Action bar-->
<style name="AppBaseTheme.Toolbar" parent="Widget.AppCompat.ActionBar.Solid">
<item name="Android:textColorPrimary">@color/action_bar_text</item>
<item name="colorControlNormal">@color/action_bar_text</item>
</style>
多くの回答が非推奨になったので、スレッドを更新し、ActionBar(ツールバー)とActionBarポップアップメニューでテキストの色と背景色を変更する方法を示します。
アクションバー(ツールバー)を使ったAndroidの最新のアプローチ(2018年5月現在)は、NoActionBarでテーマを使用し、代わりにツールバーを使用することです。
だからここにあなたが必要とするものがあります:
In Activity(AppCompatActivityを拡張する)でToolbarを宣言します。
Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(myToolbar);
アクティビティのレイアウトxmlにツールバーを追加します。ここで私たちはカスタム(上書きされたテーマ)を設定します、Android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
とapp:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
に注意してください、彼らはトリックをするでしょう。
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?attr/actionBarSize"
Android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
app:layout_constraintTop_toTopOf="parent" />
Styles.xmlでは、カスタムカラーを設定するためにこれら2つのスタイルを上書きする必要があります。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarTheme">@style/ThemeOverlay.AppTheme.ActionBar</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppTheme.PopupMenu</item>
</style>
<style name="ThemeOverlay.AppTheme.ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="Android:textColorPrimary">@color/action_bar_text_color</item>
<item name="Android:background">@color/action_bar_bg_color</item>
</style>
<style name="ThemeOverlay.AppTheme.PopupMenu" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="Android:background">@color/popup_bg_color</item>
<item name="Android:textColorPrimary">@color/popup_text_color</item>
</style>
それは人々だ
pSあなたが私に尋ねれば私は言うだろう:はい、この全体のテーマの事は混乱の地獄です。
これは私がすべての答えをチェックした後に使った解決策です
<!-- Base application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorAccent">@color/Button_color</item>
<item name="Android:editTextStyle">@style/EditTextStyle</item>
<item name="Android:typeface">monospace</item>
<item name="Android:windowActionBar">true</item>
<item name="colorPrimary">@color/Title_Bar_Color</item>
<item name="Android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>
<style name="EditTextStyle" parent="Widget.AppCompat.EditText"/>
<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<item name="titleTextStyle">@style/ActionBarTitleText</item>
<item name="Android:background">@color/Title_Bar_Color</item>
<item name="background">@color/Title_Bar_Color</item>
<item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>
<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="Android:textColor">@color/solid_white</item>
<item name="Android:textSize">12sp</item>
</style>
<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
<item name="Android:textColor">@color/solid_white</item>
<item name="Android:textSize">12sp</item>
</style>
必要な色を変更する
これをあなたのアクティビティのonCreateに追加してみてください。ほとんどすべてのAndroidバージョンで動作します。
actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
または
getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
この機能はうまくいきます
private void setActionbarTextColor(ActionBar actBar, int color) {
String title = actBar.getTitle().toString();
Spannable spannablerTitle = new SpannableString(title);
spannablerTitle.setSpan(new ForegroundColorSpan(color), 0, spannablerTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
actBar.setTitle(spannablerTitle);
}
それを使用するには、単にあなたのアクションバーと新しい色をそれを養う
ActionBar actionBar = getActionBar(); // Or getSupportActionBar() if using appCompat
int red = Color.RED
setActionbarTextColor(actionBar, red);
多くのメソッドを試してみてください。低バージョンのAPIでは、実行可能なメソッドは<item name="actionMenuTextColor">@color/your_color</item>
であり、Android名前空間を使用しないでください。
ps:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionMenuTextColor">@color/actionMenuTextColor</item>
</style>
良い解決策はSpannableStringBuilderを使用してそのように色を設定することです。文字列のさまざまな部分にさまざまな色を使用したり、画像を追加したりすることもできます。
新しいサポートライブラリでテスト済み。
私はここでAndroid APIを使用していますが、ここでは不可能な条件xmlでテーマを動的に変更する必要があるため、これは推奨される解決策ではありません。しかし、この解決策はとてもうまくいっています。
/**
*
* @author Kailash Dabhi
* @email [email protected]
*
*/
public static void setActionbarTextColor(Activity activity, int color) {
Field mActionViewField;
try {
mActionViewField = activity.getActionBar().getClass()
.getDeclaredField("mActionView");
mActionViewField.setAccessible(true);
Object mActionViewObj = mActionViewField.get(activity
.getActionBar());
Field mTitleViewField = mActionViewObj.getClass().getDeclaredField(
"mTitleView");
mTitleViewField.setAccessible(true);
Object mTitleViewObj = mTitleViewField.get(mActionViewObj);
TextView mActionBarTitle = (TextView) mTitleViewObj;
mActionBarTitle.setTextColor(color);
// Log.i("field", mActionViewObj.getClass().getName());
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
Android 5(Lollipop)の場合、オーバーフローメニューにtextColorを設定するには、Android:actionBarPopupThemeを使用する必要があります。