如何使用AppCompat更改ActionBar的操作文本颜色

16

我试图改变操作栏上一个动作菜单项的文本颜色,使用了AppCompat。同时溢出图标也没有改变。这是我的自定义样式styles.xml文件。

res/values/styles.xml

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
    <!-- Setting values in the default namespace affects API levels 7-13 -->
    <item name="actionBarStyle">@style/MyStyledActionBar</item>
</style>

<style name="MyStyledActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <!-- Setting values in the default namespace affects API levels 7-13 -->
    <item name="background">@drawable/bg_action_bar</item>
    <item name="titleTextStyle">@style/MyActionBarTitleText</item>
    <item name="actionMenuTextAppearance">@style/MyActionBarMenuText</item>
    <item name="actionMenuTextColor">@style/MyActionBarMenuText</item>
    <item name="actionOverflowButtonStyle">@style/MyActionButtonOverFlow</item>
</style>

<style name="MyActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@color/font_half_white</item>
</style>

<style name="MyActionBarMenuText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Menu">
    <item name="android:textColor">@color/font_half_white</item>
</style>

<style name="MyActionButtonOverFlow" parent="@style/Widget.AppCompat.Light.ActionButton.Overflow">
    <item name="android:src">@drawable/ic_action_search</item>
</style>

res/values-14/styles.xml

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
    <!-- Setting values in the android namespace affects API levels 14+ -->
    <item name="android:actionBarStyle">@style/MyStyledActionBar</item>
</style>

<style name="MyStyledActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <!-- Setting values in the android namespace affects API levels 14+ -->
    <item name="android:background">@drawable/bg_action_bar</item>
    <item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
    <item name="android:actionMenuTextAppearance">@style/MyActionBarMenuText</item>
    <item name="android:actionMenuTextColor">@style/MyActionBarMenuText</item>
    <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverFlow</item>
</style>

<style name="MyActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@color/font_half_white</item>
</style>

<style name="MyActionBarMenuText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Menu">
    <item name="android:textColor">@color/font_half_white</item>
</style>

<style name="MyActionButtonOverFlow" parent="@style/Widget.AppCompat.Light.Base.ActionButton.Overflow">
    <item name="android:src">@drawable/ic_action_search</item>
</style>

res/colors.xml

#F3F3F3

文字颜色仍旧是黑色,没有变成白色。请问有人成功改变过操作菜单的文字颜色吗?请提供一些见解。我在4.4的Nexus5设备上测试。

enter image description here

3个回答

17

使用

<item name="android:actionMenuTextColor">@color/font_half_white</item>
// added style directly 

不是

<item name="android:actionMenuTextColor">@style/MyActionButtonStyle</item>

res/values-14/styles.xml

res/values/styles.xml

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

我在测试中使用了红色。在快照中可以看到动作菜单项“主页”是红色的。 enter image description here 编辑:
完整代码:
在 `res/values-14/styles.xml` 中。
<resources>

    <!--
        Base application theme for API 14+. This theme completely replaces
        AppBaseTheme from BOTH res/values/styles.xml and
        res/values-v11/styles.xml on API 14+ devices.
    -->
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- API 14 theme customizations can go here. -->
            <item name="android:actionMenuTextColor">@color/red</item>
    </style>

</resources>

然后在res/values/styles.xml文件中

  <resources>
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light">
        <!-- API 11 theme customizations can go here. -->
         <item name="actionMenuTextColor">@color/red</item>
    </style>

</resources>

在清单文件中

android:theme="@style/AppBaseTheme" >

另一个截图

这里输入图片描述


你能分享一下你的AppTheme样式以及它在AndroidManifest.xml文件中是如何设置的吗? - Mani
<style name="AppTheme" parent="@style/Theme.AppCompat.Light"> <item name="actionBarStyle">@style/MyStyledActionBar</item> </style> - Mani
@Mani 将其添加到 AppTheme 中本身。 - Raghunandan
@Mani发布了完整的代码。其余的就由你来修复了。同时不要发布链接,请在您的帖子中发布相关代码。没有人会浪费时间查看外部资源。 - Raghunandan
对我来说起作用了,但需要将该项放在每个活动应用的主题中,而不是整个应用程序应用的主题中。我比任何东西都讨厌这个操作栏... - kellogs
显示剩余3条评论

1

您可以使用此方法更改操作栏的文本,而不考虑您的appcompat版本。请提供所需颜色的十六进制代码,并将其添加到onCreate()中。

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

0
  1. 检查您的布局xml文件中是否为<Toolbar>指定了android:theme属性,该属性将优先于主题。

  2. 覆盖您的actionBarStyle属性,如互联网上所指出的。


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