37

我正在尝试实现 ActionBarSherlock,因为有人告诉我它相对容易实现和定制。我发现它很容易实现,但我正在尝试更改 ActionBar 的背景颜色,但事实证明这很困难。

根据站点(链接),您似乎可以继承 ActionBarSherlock 的主题之一,然后覆盖您需要的属性。

这是我到目前为止所拥有的:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <style name="Theme.ActionBar" parent="Theme.Sherlock.ForceOverflow">
      <item name="android:background">#000000</item>
      <item name="background">#000000</item>
    </style>
</resources>

我注意到内置主题使用图像作为背景,但我祈祷我不必创建图像来更改背景颜色。

谢谢。

4

3 回答 3

77

操作栏背景颜色是在操作栏的样式中定义的,而不是在主题本身中定义的。你需要做这样的事情:

<style name="Theme.MyTheme" parent="Theme.Sherlock.ForceOverflow">
    <item name="actionBarStyle">@style/Widget.MyTheme.ActionBar</item>
    <item name="android:actionBarStyle">@style/Widget.MyTheme.ActionBar</item>
</style>

<style name="Widget.MyTheme.ActionBar" parent="Widget.Sherlock.ActionBar">
    <item name="android:background">#ff000000</item>
    <item name="background">#ff000000</item>
</style>

小心使用 XML 中定义的颜色。ColorDrawable不尊重它在 pre-Honeycomb 上的视图边界,因此如果您使用带有单独背景的选项卡导航来堆叠选项卡视图,您将遇到问题。

于 2012-04-08T19:36:05.207 回答
54

我刚用

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00853c")));

它改变了背景颜色。希望能帮助到你。

于 2013-03-29T13:03:40.420 回答
2

Jake Wharton 提到的代码是真的。但是,如果您有 minSDK<11,则将代码应用于 styles.xml 可能无法正常工作,因为 API-11+ 支持 android:actionBarStyle

要解决该错误:

在您的 res 文件夹中创建一个 values-v11 文件夹,并如上所述创建 XML 文件。

于 2013-09-17T18:10:21.053 回答