由于DrawerLayout
是Android活动的Chrome的一部分,因此抽屉的可能背景颜色似乎是操作栏的背景颜色,因此它们匹配。因此,我想设置作为抽屉内容的ListView
与操作栏具有相同的背景颜色,我想在定义{{1}的布局XML中这样做}。
在这里,我迷失在Android风格系统的迷人小通道的迷宫中......
我知道ListView
语法允许您通过引用引用活动使用的主题中定义的值(例如,?android:attr/
作为列表项行的背景“激活”状态。)
我知道?android:attr/activatedBackgroundIndicator
是主题指向用于设置操作栏本身样式的样式的位置,而在嵌套(?)样式上,android:actionBarStyle
是用于操作的背景杆
我不知道的是如何制作android:background
,以应用于?android:attr/
,从操作栏定义的样式中提取背景。
这可能吗?如果是这样,语法是什么?
我猜这是不可能的,这就是官方ListView
样本硬编码背景颜色的原因......
谢谢!
答案 0 :(得分:8)
不幸的是,通过XML不可能。
您可以在代码中执行以下操作(未经测试,但应该可以使用):
// Need to manually create android.styleable.ActionBar.
// If you need other attributes, add them
int[] android_styleable_ActionBar = { android.R.attr.background };
// Need to get resource id of style pointed to from actionBarStyle
TypedValue outValue = new TypedValue();
getTheme().resolveAttribute(android.R.attr.actionBarStyle, outValue, true);
// Now get action bar style values...
TypedArray abStyle = getTheme().obtainStyledAttributes(outValue.resourceId,
android_styleable_ActionBar);
// background is the first attr in the array above so it's index is 0.
Drawable bg = abStyle.getDrawable(0);
abStyle.recycle();
答案 1 :(得分:0)
AFAICT根本无法使用任何?android:attr
语法来解决操作栏背景问题,因为在相关attrs.xml中没有导出此类属性
您应该在自定义主题中添加/定义此类属性,然后在样式/布局中使用引用。例如:
-attrs.xml:
<declare-styleable name="CustomTheme">
<attr name="actionbarBackground" format="reference"/>
</declare-styleable>
-themes.xml
<style name="CustomTheme" parent="Theme.Holo.Light">
...
<item name="actionbarBackground">@color/your_fav_color</item>
<item name="android:actionBarStyle">@style/CustomActionbar</item>
...
</style>
-styles.xml
...
<style name="CustomActionbar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">?attr/actionbarBackground</item>
....
</style>