如何更改ActionBar的文本颜色?我继承了Holo Light主题,能够更改ActionBar的背景,但找不到可调整的属性来更改文本颜色。
好的,我可以使用android:textColorPrimary属性更改文本颜色,但这也会更改在ActionBar按钮上溢出时显示的下拉菜单的文本颜色。有什么办法可以更改那些下拉菜单/列表的颜色吗?
如何更改ActionBar的文本颜色?我继承了Holo Light主题,能够更改ActionBar的背景,但找不到可调整的属性来更改文本颜色。
好的,我可以使用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>
MyTheme.ActionBarStyle
继承自Widget.Holo.Light.ActionBar
。 - Jake Wharton我找到了一种适用于任何 ActionBar
(Sherlock,Compat 和 Native)的好方法:
只需要使用 html 来设置标题,并指定文本颜色。例如,要将 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>。
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))));
red
替换为 " + color + "
。 - Phil我和你遇到了同样的问题,这是一个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的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);
}
}
actionBarTextView.setTextColor(Color.RED);
上出现了 NullPointerException
。 - DroidLearnergetIndentifier()
调用,则可以首先查找(TextView) findViewById(com.actionbarsherlock.R.id.abs__action_bar_title);
(务必检查它不是null)。 - AndreToolbar toolbar = findViewById(R.id.toolbar);
,其中在XML布局文件中,它被com.google.android.material.appbar.AppBarLayout
元素包围,然后使用toolbar.setTitleTextColor(getResources().getColor(R.color.colorViolet));
。 - YoussefDir最简单的方法是在styles.xml中进行操作。
谷歌的模板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>
如果你在闭合的
标签之前添加另一行,如所示,那么文本颜色将更改为具有深色操作栏应有的颜色:<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内置的颜色,并使用android:textColorPrimary属性:
<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的标题。
这个话题很老套,但对于未来的读者来说,使用工具栏会使一切变得非常容易:
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个属性用于更改操作栏的标题和副标题。
在SDK v21+中,在Material主题上设置操作栏的HTML字符串无效。
如果您想更改它,应该在您的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>
<item name="android:titleTextStyle">
和<item name="titleTextStyle">
两者,因为我使用了appcompat支持库。 - Rock Lee