在使用AppCompat 21的Light.DarkActionBar主题时如何更改ActionBar标题文本颜色?

57

我正在使用v7 appcompat 21库,在早期的Android设备上使用新的Material样式。我的styles.xml文件如下:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:textColorPrimary">#ff0000</item>
    <item name="android:textColorPrimaryInverse">#ff0000</item>
</style>
我试图更改操作栏上的文本颜色。但是,无论我将textColorPrimary或textColorPrimaryInverse设置为什么,颜色始终是白色。如果我继承自Theme.AppCompat,则可以覆盖"textColorPrimary",如果我继承自Theme.AppCompat.Light,则可以覆盖"textColorPrimaryInverse"。但是,在使用Light.DarkActionBar主题时,两者都不起作用。
我肯定正在使用AppTheme,因为像colorPrimary这样的属性设置以更改操作栏背景颜色非常有效。我没有使用任何其他资源限定符样式文件。
我查看了Android样式文件,似乎找不到要覆盖的属性。有什么想法吗?这是一个appcompat的错误吗?
7个回答

172
您可以通过主题的 actionBarStyle 属性来更改它。
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar.Solid">
    <item name="titleTextStyle">@style/MyTitleTextStyle</item>
</style>

<style name="MyTitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">CHANGE_COLOR_HERE</item>
</style>

26
不知何故,当在Android 5或Android 4设备上运行时,以您所设置的方式设置textColor没有效果(我已在这两个设备上进行了测试)- 有任何想法吗?我正在使用带有AppCompatActivity的工具栏,并在我的清单中应用了上述主题。 - AgentKnopf
6
这只适用于ActionBar。为了使其正常工作,您需要将您的ToolBar设置为ActionBar。 - jimmy0251
1
这对我不起作用。我正在使用工具栏并将其设置为操作栏。我已经为我的应用程序使用了Theme.AppCompat.Light.NoActionBar主题,以及ThemeOverlay.AppCompat.Dark.ActionBar主题的AppBarLayout和ThemeOverlay.AppCompat.Light样式的工具栏。 - Rakesh Yadav
我真的很想知道,如果可能的话,将三个样式资源压缩在一个父XML标记下会是什么样子。 - Harsha
字幕的样式怎么处理?该怎么做呢? - mirzak

26

这将使您的工具栏标题使用白色:

<android.support.v7.widget.Toolbar
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />
要了解 ThemeOverlay.AppCompat.Dark.ActionBarTheme.AppCompat.Light.DarkActionBar 之间的区别,可以查看此答案

它是 app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 应用浅色,因为在这个主题中使用的标题颜色是白色。


这个答案没有非常明确地指出需要哪些操作才能使其工作。是哪一部分让它变成了白色呢?如果有人想要将其变成红色呢?app: 前缀在哪里被定义了呢? - Thibault D.
@Thibault D. 我已经在我的答案中添加了更多细节。 - vovahost
谢谢您的快速回复,我今天会尝试一下! - Thibault D.

4
请确保您在所有值文件夹中进行更改,例如'values-v11'、'values-v14'等(如果存在)。
否则,请确保应用程序中使用与上面显示的“AppTheme”相同的主题。
请发布您的完整style.xml和引用样式的清单代码,这将提供有关您的问题的更多见解。
此外,您可以尝试在工具栏上设置app:themeapp:popupTheme属性。

4
<android.support.v7.widget.Toolbar android:id="@+id/my_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 正常工作! - sancho21

3

在您的Activity的onCreate方法中尝试添加以下内容。几乎适用于所有Android版本。

对于Java Activities:

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

对于片段:

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

3
不要这么做,使用样式。 - user25

2

很不幸,我花了很多时间来改变应用名称的颜色。我有许多主题可供选择。最终,对我有效的是更改以下两个属性。

    <item name="android:textColorPrimary">#FF0000</item>
    <item name="android:textColorSecondary">#FF0000</item>

1
我使用了一个生成的布局xml文件,没有注意到android:theme属性被覆盖了。
你检查过你的了吗? :)

-3

试试这个:

<item name="actionMenuTextColor">@color/red</item>

这只会给溢出菜单中的文本上色。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接