【发布时间】:2014-09-12 23:31:10
【问题描述】:
所以我正在尝试制作一个使用基于主题的颜色作为背景的selector。按照this SO answer 的说明,我首先在 res/values/colors.xml 中定义我的可绘制颜色:
<color name="selected">#FFF7C9</color>
然后我在 res/values/attrs.xml 中定义一个属性:
<attr name="drawable_selected" format="reference" />
然后在我的主题中,我将属性设置为我的可绘制颜色(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>
我可以根据它们更改可绘制的颜色(res/values/colors.xml)
<color name="selected">?selected_color</color>
并在我的选择器中使用android:drawable="@color/selected 直接引用drawable。
但是,这也会导致崩溃!并将可绘制的颜色更改回硬编码值#FFF7C9 修复它。看来整个主题系统已经很崩溃了……
【问题讨论】:
标签: android xml android-layout themes