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

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

所以,每一次,如果主题变化,两个背景都会自动改变。

我看着R.attr ,但没有find任何东西。

Solutions Collecting From Web of "如何获得当前主题的操作栏背景颜色?"

ActionBar API没有办法检索当前的背景Drawable或者Color。

但是,您可以使用Resources.getIdentifier来调用View.findViewById ,检索ActionBarView ,然后调用View.getBackground来检索Drawable 。 即使如此,这仍然不会给你的颜色。 唯一的方法就是将Drawable转换成Bitmap ,然后使用某种颜色分析器来查找主色。

这里是一个检索ActionBar Drawable的例子。

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

但似乎最简单的解决scheme将是创build自己的属性,并将其应用于您的主题。

这是一个例子:

自定义属性

 <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(); } }