所以我试图制作一个使用基于主题的颜色作为背景的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
值可以修复它。看起来整个主题系统都很破碎......
答案 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>