从嵌套样式资源中检索值的语法?

时间:2013-05-30 10:37:37

标签: android android-theme

由于DrawerLayout是Android活动的Chrome的一部分,因此抽屉的可能背景颜色似乎是操作栏的背景颜色,因此它们匹配。因此,我想设置作为抽屉内容的ListView与操作栏具有相同的背景颜色,我想在定义{{1}的布局XML中这样做}。

在这里,我迷失在Android风格系统的迷人小通道的迷宫中......

我知道ListView语法允许您通过引用引用活动使用的主题中定义的值(例如,?android:attr/作为列表项行的背景“激活”状态。)

我知道?android:attr/activatedBackgroundIndicator是主题指向用于设置操作栏本身样式的样式的位置,而在嵌套(?)样式上,android:actionBarStyle是用于操作的背景杆

我不知道的是如何制作android:background,以应用于?android:attr/,从操作栏定义的样式中提取背景。

这可能吗?如果是这样,语法是什么?

我猜这是不可能的,这就是官方ListView样本硬编码背景颜色的原因......

谢谢!

2 个答案:

答案 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>