9

由于DrawerLayout它是 Android 活动的 chrome 的一部分,因此抽屉的可能背景颜色似乎是操作栏的背景颜色,因此它们匹配。因此,我想ListView将抽屉内容设置为与操作栏具有相同的背景颜色,并且我想在定义ListView.

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

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

我知道这android:actionBarStyle是主题指向用于设置操作栏本身样式的样式的地方,并且在该嵌套(?)样式上,android:background是用于操作栏的背景。

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

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

我的猜测是这是不可能的,这就是官方DrawerLayout示例硬编码背景颜色的原因......

谢谢!

4

2 回答 2

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();
于 2013-05-30T12:37:54.480 回答
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>
于 2013-05-30T13:05:56.157 回答