如何在XML中为ActionBar设置非colorPrimary的背景色?
解决AppCompat ActionBar背景色不生效的问题
我太懂这种无奈了——不想动全局的colorPrimary,ActionBar又不是Toolbar没法直接在布局里改,试了配置还没效果确实闹心。你之前的问题出在属性前缀和样式继承的兼容性上,给你个能直接生效的方案:
核心修正点
因为你用的是Theme.AppCompat主题,属于AppCompat库的范畴,所以:
- 不要用带
android:前缀的actionBarStyle,改用无前缀的属性名,这是AppCompat库专属的自定义属性 - 自定义ActionBar样式必须继承自
Widget.AppCompat.ActionBar,而不是原生系统的Widget.ActionBar
完整的样式配置示例
<resources> <!-- 基础应用主题 --> <style name="AppTheme" parent="Theme.AppCompat"> <!-- 重点:这里没有android:前缀 --> <item name="actionBarStyle">@style/MyActionBar</item> </style> <!-- 自定义ActionBar样式 --> <style name="MyActionBar" parent="Widget.AppCompat.ActionBar"> <!-- 设置你想要的背景色,替换成你的自定义颜色 --> <item name="background">@color/your_custom_actionbar_bg</item> <!-- 可选:修改标题文字颜色 --> <item name="titleTextStyle">@style/MyActionBarTitle</item> </style> <!-- 可选:自定义标题文字样式 --> <style name="MyActionBarTitle" parent="TextAppearance.AppCompat.Widget.ActionBar.Title"> <item name="android:textColor">@color/your_custom_title_color</item> </style> </resources>
为什么之前的配置无效?
你之前用了android:actionBarStyle,这个属性是给原生Android系统的ActionBar用的,但Theme.AppCompat是AppCompat库封装的主题,它会优先识别无前缀的actionBarStyle属性。如果用了带前缀的,AppCompat库会忽略这个配置,继续沿用colorPrimary作为背景色。
另外记得在colors.xml里定义好你的自定义颜色,比如:
<color name="your_custom_actionbar_bg">#FF9800</color> <color name="your_custom_title_color">#FFFFFF</color>
只要你的Activity继承的是AppCompatActivity(搭配Theme.AppCompat的标准操作),这个配置肯定能生效,不用动全局的colorPrimary~
内容的提问来源于stack exchange,提问作者Damn Vegetables
相关产品推荐
相关产品推荐

