Android颜色选择器不适用于自定义属性

时间:2012-01-25 15:13:40

标签: android

我已经进入了attrs.xml

<resources> 
    <!-- theme specific colors -->
    <attr format="reference|color" name="foreground" />
    <attr format="reference|color" name="background" /> 
</resources>

然后在theme.xml中

<style name="MyTheme" parent="android:Theme.Black">
    <item name="android:windowNoTitle">true</item>
    <item name="foreground">#0000FF</item>
    <item name="background">#00FF00</item>
</style>

我还创建了名为forground_to_background.xml

的颜色选择器
<selector xmlns:android="http://schemas.android.com/apk/res/android">   
    <item android:state_pressed="true" android:color="?background"/> <!-- pressed -->
    <item android:state_focused="true" android:color="?background"/> <!-- focused -->
    <item android:color="?foreground"/> <!-- default -->
</selector>

现在我想在TextView中一起使用它:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/forground_to_background" />

不幸的是它不起作用。我没有漂亮的绿蓝色,只有一种颜色 - 红色。 TextView始终为红色。当我将TextView更改为使用“?foreground”时,颜色会发生变化。此外,当我将颜色选择器从“?xxxx”更改为硬编码值时,“#00f”颜色开始起作用。

哪里有问题?我做错了什么?

修改 我认为这是问题/错误Can a selector resource use a color defined in a style?

的重复

EDIT2: 此外,当我尝试在ListView应用程序中使用此TextView时崩溃。它无法解析XML。

3 个答案:

答案 0 :(得分:13)

在为选择器选择颜色时,无法引用?attr /。如果你想在选择器中使用每个主题颜色,你可以做的是创建多个引用@ color /和@ drawable /的选择器,然后有一个&#34;引用&#34; attr将其中一个选择器与给定的样式相关联。

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

然后您必须设置文本颜色,如

android:textColor="?attr/forground_to_background"

我认为文本总是红色的,因为Android将attr的整数值解释为颜色(红色),而不是将其用作查找实际需要的内容。

答案 1 :(得分:5)

发生这种情况的原因是我有不同的上下文。虽然膨胀Context知道我的主题attrs,但是对于ListView适配器我传递的ApplicationContext不知道那些attrs。现在我不知道它为什么不知道它们;)

答案 2 :(得分:0)

您确定将MyTheme应用于活动或textview吗? 你可以尝试的另一件事是,而不是使用“?”你的forground_to_background.xml中的运算符,尝试使用“@”代替。看看是否能解决你的问题