使用 AppCompat 更改操作栏的背景颜色

Posted

技术标签:

【中文标题】使用 AppCompat 更改操作栏的背景颜色【英文标题】:Change Background color of the action bar using AppCompat 【发布时间】:2014-06-03 01:15:57 【问题描述】:

我在网上发现了一些关于这个问题的问题。不幸的是,到目前为止我尝试的一切都没有成功。

标题说,我需要更改操作栏的背景颜色。

该项目的最小 sdk 为 9,最大 sdk 为 19。

我在我的 res/values 文件夹中创建了一个 xml 文件:

red_actionbar.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light">
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>
    <style name="MyActionBar"
           parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="background">@color/red</item>
    </style>
</resources>

存储在 res/values 中的 colors.xml

<resources>
    <color name="red">#FF0000</color>
</resources>

以及我更改主题的清单部分

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/CustomActionBarTheme" >

但没有任何改变。问题出在哪里?应用程序接受代码,因为如果我改变 ths:

<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light">

<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar ">

它确实改变了我的应用程序的主题,所以问题出在样式上,但我不知道如何解决。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:actionBarStyle" tools:ignore="NewApi">@style/MyActionBar</item>
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>
    <style name="MyActionBar"
           parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="android:background"  tools:ignore="NewApi">@color/red</item>
        <item name="background">@color/red</item>
    </style>
</resources>

【问题讨论】:

什么版本的android有设备在哪里测试代码? 安卓 4.2.2 三星 s2 plus 主题总是很棘手。这是一团糟,而且记录不充分。另一方面,您是否需要至少支持 9 的 Android SDK?您将涵盖运行 15 或更高版本的绝大多数设备......只是说...... 【参考方案1】:
<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background"  tools:ignore="NewApi">@color/red</item>
    <item name="background">@color/red</item>
</style>

<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light">
    <item name="android:actionBarStyle"   tools:ignore="NewApi">@style/MyActionBar</item>
    <item name="actionBarStyle">@style/MyActionBar</item>

</style>

您需要 android:backgroundbackground 项目。前者适用于原生支持 ActionBar 的较新版本的 android。后者适用于较旧的 android 版本。

编辑

而不是&lt;resources&gt; 使用

<resources xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">

从 SDK 21

要改变Action Bar的背景颜色,添加到ActionBarTheme,两种颜色要不同,否则不起作用(感谢@Dre@lagoman

<item name="colorPrimary">@color/my_awesome_red</item> 
<item name="colorPrimaryDark">@color/my_awesome_darker_red</item>

【讨论】:

如果我使用 android:actionBarStyle 会出错 android:actionBarStyle 需要 API 级别 11(当前最低为 9) 如果您已将 SDK 更新到 API 级别 21,要更改操作栏背景颜色,请将其添加到 ActionBarTheme@color/my_awesome_red@color/my_awesome_darker_red 这是根据:http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html 请注意,colorPrimary 和 colorPrimaryDark 不应该是相同的颜色。如果是,Android 将不会为操作栏着色。 在找到这个之前,我无法告诉你我倾倒了多少线程都不起作用。非常感谢! 似乎没有任何效果。令人惊讶的是,您应该花费多少时间来做一件简单的事情,例如设置操作栏的背景颜色...【参考方案2】:

试试这个:

<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
    <item name="actionBarStyle">@style/MyActionBar</item>

</style>

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">

    <item name="android:background">@color/red</item>
    <item name="background">@color/red</item>

</style>

【讨论】:

我无法使用。类型不匹配:无法从 android.app.ActionBar 转换为 android.support.v7.app.ActionBar。我的活动扩展了 ActionBarActivity 以支持 sdk 9 我能知道如何更改标题颜色吗? 谢谢!我在这上面花了 5 个小时!! 我不明白为什么那个编辑被添加到接受的答案中?? 只是复制粘贴到styles.xml中??我运气不好:(【参考方案3】:

试试这个。

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary"> #6699FF </item>
</style>

您可以根据自己的选择更改#6699FF 颜色(或使用颜色资源)。

【讨论】:

为我工作...太棒了【参考方案4】:

尝试使用

parent="Theme.AppCompat.Light"

而不是

parent="@style/Theme.AppCompat.Light"

【讨论】:

以上是关于使用 AppCompat 更改操作栏的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

更改标签栏的背景颜色

如何更改android状态栏的背景颜色

我想更改 Bootstrap 导航栏的背景颜色。 [复制]

是否可以更改 ios 快餐栏的背景颜色?

更改状态栏的背景颜色

如何更改导航栏的默认背景颜色? [复制]