Android主题drawable不适用于Color Drawable(Bug?)

时间:2014-09-12 23:31:11

标签: android xml android-layout themes

所以我试图制作一个使用基于主题的颜色作为背景的selector。按照this SO answer的说明,我首先在res / values / colors.xml中定义颜色drawable:

<color name="selected">#FFF7C9</color>

然后我在res / values / attrs.xml中定义一个属性:

<attr name="drawable_selected" format="reference" />

然后在我的主题中,我将属性设置为我的颜色drawable(res / values / styles.xml):

<style name="AppThemeWhite" parent="AppTheme">
    <item name="drawable_selected">@color/selected</item>
</style>

最后,我在我的选择器中引用了属性(res / drawable / selected_background):

<selector>
    <item android:state_activated="true" android:drawable="?drawable_selected" />
    <item android:drawable="@android:color/transparent" />
</selector>

当我运行它时,在尝试使用选择器的类膨胀时出现错误Binary XML file line #2: Error inflating class <unknown>。但是,当我更改选择器的state_activated以使用android:drawable="@color/selected"直接引用drawable时,它可以正常工作。

这是一个错误,还是我做错了什么?

修改

如果我添加颜色属性(res / values / attrs.xml)

<attr name="selected_color" format="color" />

并定义主题中的颜色(res / values / styles.xml)

<item name="selected_color">#FFF7C9</item>

我可以根据它们更改颜色drawable(res / values / colors.xml)

<color name="selected">?selected_color</color>

并使用我的选择器中的android:drawable="@color/selected直接引用drawable。 但是,这也会导致崩溃!并将颜色drawable更改回硬编码的#FFF7C9值可以修复它。看起来整个主题系统都很破碎......

1 个答案:

答案 0 :(得分:1)

原因

是的,从drawable(或颜色)引用自定义主题属性目前在Android上不起作用。

您可以在此处查看有关很久以前报告的问题的更多详细信息:https://code.google.com/p/android/issues/detail?id=26251

正如您所看到的,他们最终在Android L版本中解决了它,但是在低于L的任何地方,这样的引用都会失败。

解决方案

要解决此问题,您需要执行以下操作:

<selector>
    <item android:state_activated="true" android:drawable="@color/selected" />
    <item android:drawable="@android:color/transparent" />
</selector>

其中@color/selected定义为帖子的开头:

<color name="selected">#FFF7C9</color>