使用 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:background
和 background
项目。前者适用于原生支持 ActionBar 的较新版本的 android。后者适用于较旧的 android 版本。
编辑
而不是<resources>
使用
<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
:试试这个:
<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 更改操作栏的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章