如何获取当前主题操作栏的背景颜色?

时间:2014-04-04 19:28:06

标签: android android-actionbar background-color android-theme

我试图让导航抽屉的背景始终与操作栏的背景颜色匹配。

这样,每次,如果主题改变,两个背景都会自动改变。

我调查了R.attr,但没有找到任何东西。

1 个答案:

答案 0 :(得分:6)

ActionBar API无法检索当前背景Drawable或颜色。

但是,您可以使用Resources.getIdentifier来呼叫View.findViewById,检索ActionBarView,然后致电View.getBackground以检索Drawable。即便如此,这仍然不会给你这种颜色。唯一的方法是将Drawable转换为Bitmap,然后使用某种color analyzer来查找主色。

以下是检索ActionBar Drawable的示例。

    final int actionBarId = getResources().getIdentifier("action_bar", "id", "android");
    final View actionBar = findViewById(actionBarId);
    final Drawable actionBarBackground = actionBar.getBackground();

但似乎最简单的解决方案是创建自己的属性并将其应用到主题中。

以下是一个例子:

自定义属性

<attr name="drawerLayoutBackground" format="reference|color" />

初始化属性

<style name="Your.Theme.Dark" parent="@android:style/Theme.Holo">
    <item name="drawerLayoutBackground">@color/your_color_dark</item>
</style>

<style name="Your.Theme.Light" parent="@android:style/Theme.Holo.Light">
    <item name="drawerLayoutBackground">@color/your_color_light</item>
</style>

然后在包含DrawerLayout的布局中,应用android:background属性,如下所示:

android:background="?attr/drawerLayoutBackground"

或者您可以使用TypedArray

获取它
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    final TypedArray a = obtainStyledAttributes(new int[] {
            R.attr.drawerLayoutBackground
    });
    try {
        final int drawerLayoutBackground = a.getColor(0, 0);
    } finally {
        a.recycle();
    }

}