ActionBar文本颜色

我怎样才能改变ActionBar的文字颜色? 我已经inheritance了Holo Light主题,我可以更改ActionBar的背景,但是我没有find调整文本颜色的属性。


好的,我可以使用属性android:textColorPrimary更改文本颜色,但它也会更改在ActionBarbutton上发生溢出时显示的下拉菜单的文本颜色。 任何想法如何改变这些下拉菜单/列表的颜色?

好的,我find了一个更好的方法。 我现在只能改变标题的颜色。 你也可以调整字幕。

这是我的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的颜色,所以我需要改变文本的颜色以及Title和Menus。 所以最后我去了git hub,看看源代码,直到find该死的正确的风格:

 <?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@drawable/actionbarbground可以了!

我发现了一种与ActionBarSherlockCompatNative )的任何风格都适用的方法:

只需使用html来设置标题,并指定文本的颜色。 例如,要将ActionBar文本颜色设置为红色,只需执行以下操作:

 getActionBar()/* or getSupportActionBar() */.setTitle(Html.fromHtml("<font color=\"red\">" + getString(R.string.app_name) + "</font>")); 

您也可以使用红色hex代码#FF0000而不是red字。 如果遇到问题,请参阅Android Html.fromHtml(String)不适用于<font color ='#'> text </ font> 。


此外,如果您想使用颜色资源,则可以使用此代码获取正确的HEXstring,并根据需要删除字母( 字体标签不支持字母):

 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); } } 

我已经完成了简单的一行代码

 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个属性更改操作栏的标题和副标题。

在操作栏上设置HTMLstring不适用于SDK v21 +中的材质主题

如果你想改变它,你应该在你的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> 

它是一个老话题,但为未来的读者,如果您使用ToolBar它使一切都非常容易:

 Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar); toolbar.setTitle(R.string.app_name); toolbar.setTitleTextColor(getResources().getColor(R.color.someColor)); setSupportActionBar(toolbar); 

这是我检查所有答案后使用的解决scheme

 <!-- 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> 

更改所需的颜色,它将工作

find方法很好地做到这一点,而不是在API> = 21上创build自己的布局。

它只会着色文本,并控制操作栏内的绘图。

希望对某人有用。

 <!--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> 

最直接的方法是在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> 

如果在结束标记之前再添加一行,如下所示,这将使文本颜色更改为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> 

注意:这改变了标题的颜色以及在ActionBar中显示的任何MenuItems的标题。

这个function运作良好

 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> 

尝试添加这个在你的Activity的onCreate。 几乎每个Android版本都可以使用。

  actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>")); 

要么

 getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>")); 

一个很好的解决方法是使用SpannableStringBuilder并设置颜色。 你甚至可以在string的不同部分使用不同的颜色,添加图像等。

经过新的支持库testing。

请参阅Android:使用TextView.setText()着色部分string?

这不是推荐的解决scheme,因为我正在android apis这里,但作为我的应用程序需要改变主题动向xml条件不可能在这里,所以我需要这样做。 但是这个解决scheme工作得很好。

解: –

  /** * * @author Kailash Dabhi * @email kailash09dabhi@gmail.com * */ 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(棒棒糖),您将不得不使用android:actionBarPopupTheme来设置溢出菜单的textColor