如何更改ActionBar的文本颜色?我继承了Holo Light主题,我能够改变ActionBar的背景,但是我没有找到调整文本颜色的属性是什么 .
好的,我可以使用android:textColorPrimary属性更改文本颜色,但它也会更改ActionBar按钮上发生溢出时显示的下拉菜单的文本颜色 . 知道如何更改那些下拉菜单/列表的颜色?
好的,我找到了更好的方法 . 我现在只能改变 Headers 的颜色 . 你也可以调整副 Headers .
Here is my 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>
我发现了一种适用于 ActionBar (Sherlock,Compat和Native)的任何方式的方法:
ActionBar
只需使用html设置 Headers ,并指定文本颜色 . 例如,要将ActionBar文本颜色设置为红色,只需执行以下操作:
getActionBar()/* or getSupportActionBar() */.setTitle(Html.fromHtml("<font color=\"red\">" + getString(R.string.app_name) + "</font>"));
您也可以使用红色十六进制代码 #FF0000 而不是单词 red . 如果您遇到此问题,请参阅Android Html.fromHtml(String) doesn't work for <font color='#'>text</font> .
#FF0000
red
此外,如果您想使用颜色资源,此代码可用于获取正确的HEX字符串,并在需要时删除alpha(字体标记不支持alpha):
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))));
我遇到了和你一样的问题,它是一个Holo.Light主题但是我想要设置ActionBar颜色的样式,所以我需要更改文本颜色以及Title和Menus . 所以最后我去了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 !
@color/actionBarText
@drawable/actionbarbground
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个属性更改操作栏的 Headers 和副 Headers .
Widget.Styled.ActionBar
这是一个古老的话题,但对于未来的读者来说,使用ToolBar可以使一切变得非常简单:
Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar); toolbar.setTitle(R.string.app_name); toolbar.setTitleTextColor(getResources().getColor(R.color.someColor)); setSupportActionBar(toolbar);
在操作栏上设置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>
如果您想为副 Headers 设置样式,则只需在自定义样式中添加它 .
<item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
想要为 AppCompat 库获得相同结果的人那么这就是我使用的:
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>
如果在结束标记之前再添加一行,如图所示,那么将使用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>
注意:这会更改 Headers 的颜色以及ActionBar中显示的任何MenuItem的 Headers .
这是我在检查完所有答案后使用的解决方案
<!-- 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>
更改它将起作用的所需颜色
找到了很好地完成它的方法,而无需在API> = 21上创建自己的布局 .
它只会着色文本并控制操作栏内的drawable .
希望它对某人有用 .
<!--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>
这个功能很好用
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);
尝试在Activity的onCreate中添加它 . 适用于几乎所有Android版本 .
actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
要么
getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
尝试了很多方法,在低版本的API中,一个可行的方法是 <item name="actionMenuTextColor">@color/your_color</item> 并且不要使用Android命名空间,希望可以帮到你
<item name="actionMenuTextColor">@color/your_color</item>
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>
很多答案都已弃用,因此我将更新该主题并演示如何在ActionBar(工具栏)和ActionBar弹出菜单中更改文本颜色和backgroundcolor .
使用Action栏(工具栏)时Android中的最新方法(截至2018年5月)是使用带NoActionBar的Theme并使用工具栏 .
所以这就是你需要的:
Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(myToolbar);
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" />
<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>
这就是人们
附:如果你问我,我会说:是的,这整个主题的事情是一团糟 .
一个很好的解决方案是使用SpannableStringBuilder并以这种方式设置颜色 . 您甚至可以在字符串的不同部分使用不同的颜色,添加图像等 .
使用新的支持库进行测试 .
见Android: Coloring part of a string using TextView.setText()?
这不是推荐的解决方案,因为我在这里进入android apis但是由于我的应用程序需要在xml条件下动态地改变主题,所以我需要这样做 . 但是这个解决方案非常好用 .
/** * * @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 .
19 回答
好的,我找到了更好的方法 . 我现在只能改变 Headers 的颜色 . 你也可以调整副 Headers .
Here is my styles.xml:
我发现了一种适用于
ActionBar
(Sherlock,Compat和Native)的任何方式的方法:只需使用html设置 Headers ,并指定文本颜色 . 例如,要将ActionBar文本颜色设置为红色,只需执行以下操作:
您也可以使用红色十六进制代码
#FF0000
而不是单词red
. 如果您遇到此问题,请参阅Android Html.fromHtml(String) doesn't work for <font color='#'>text</font> .此外,如果您想使用颜色资源,此代码可用于获取正确的HEX字符串,并在需要时删除alpha(字体标记不支持alpha):
我遇到了和你一样的问题,它是一个Holo.Light主题但是我想要设置ActionBar颜色的样式,所以我需要更改文本颜色以及Title和Menus . 所以最后我去了git hub并查看源代码,直到找到该死的正确样式:
所以你现在所要做的就是设置你想要的
@color/actionBarText
和@drawable/actionbarbground
!ActionBar ID不能直接使用,所以你必须在这里做一点点黑客攻击 .
我已经完成了简单的一行代码
将其添加到操作栏的根目录 . 我有这个问题 .
actionMenuTextColor - 更改操作栏文本的文本颜色,它在
Widget.Styled.ActionBar
的一部分时从不起作用,因此我必须将其添加到根目录 . 其他2个属性更改操作栏的 Headers 和副 Headers .这是一个古老的话题,但对于未来的读者来说,使用ToolBar可以使一切变得非常简单:
在操作栏上设置HTML字符串不适用于SDK v21中的Material主题
如果要更改它,则应在style.xml中设置主文本颜色
如果您想为副 Headers 设置样式,则只需在自定义样式中添加它 .
想要为
AppCompat
库获得相同结果的人那么这就是我使用的:最直接的方法是在styles.xml中执行此操作 .
Google的模板styles.xml目前生成以下内容:
如果在结束标记之前再添加一行,如图所示,那么将使用Dark ActionBar将文本颜色更改为应该的颜色:
如果要将颜色自定义为其他颜色,可以在colors.xml中指定自己的颜色,甚至可以使用android:textColorPrimary属性从Android中使用内置颜色:
注意:这会更改 Headers 的颜色以及ActionBar中显示的任何MenuItem的 Headers .
这是我在检查完所有答案后使用的解决方案
更改它将起作用的所需颜色
找到了很好地完成它的方法,而无需在API> = 21上创建自己的布局 .
它只会着色文本并控制操作栏内的drawable .
希望它对某人有用 .
这个功能很好用
然后使用它只是喂它你的动作栏和新的颜色即
尝试在Activity的onCreate中添加它 . 适用于几乎所有Android版本 .
要么
尝试了很多方法,在低版本的API中,一个可行的方法是
<item name="actionMenuTextColor">@color/your_color</item>
并且不要使用Android命名空间,希望可以帮到你PS:
很多答案都已弃用,因此我将更新该主题并演示如何在ActionBar(工具栏)和ActionBar弹出菜单中更改文本颜色和backgroundcolor .
使用Action栏(工具栏)时Android中的最新方法(截至2018年5月)是使用带NoActionBar的Theme并使用工具栏 .
所以这就是你需要的:
android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
和app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
,他们将做到这一点 .这就是人们
附:如果你问我,我会说:是的,这整个主题的事情是一团糟 .
一个很好的解决方案是使用SpannableStringBuilder并以这种方式设置颜色 . 您甚至可以在字符串的不同部分使用不同的颜色,添加图像等 .
使用新的支持库进行测试 .
见Android: Coloring part of a string using TextView.setText()?
这不是推荐的解决方案,因为我在这里进入android apis但是由于我的应用程序需要在xml条件下动态地改变主题,所以我需要这样做 . 但是这个解决方案非常好用 .
解决方案: -
对于Android 5(棒棒糖),你将不得不使用android:actionBarPopupTheme来设置溢出菜单的textColor .