我试图在用户触摸它时更改Android TextView
小部件的背景颜色 . 我为此创建了一个选择器,它存储在 res/color/selector.xml
中,大致如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:color="@color/semitransparent_white"
/>
<item
android:color="@color/transparent"
/>
</selector>
如果感兴趣的话, TextView
的 clickable
属性是 true .
当我将此选择器分配给 TextView
作为 android:background="@color/selector"
时,我在运行时收到以下异常:
ERROR / AndroidRuntime(13130):引起:org.xmlpull.v1.XmlPullParserException:二进制XML文件行#6:标记需要一个'drawable'属性或定义drawable的子标记
当我将属性更改为drawable时,它可以工作,但结果看起来完全错误,因为ID似乎被解释为图像引用而不是颜色引用(如“drawable”所示) .
令我困惑的是我可以设置颜色参考,例如“@ color / black”,直接作为背景属性 . 这是按预期工作的 . 使用选择器不起作用 .
我也可以使用选择器作为 textColor
没有问题 .
What's the correct way to apply a background-color-selector to a TextView in Android?
5 回答
这里的问题是你不能使用颜色选择器定义背景颜色,你需要一个 drawable 选择器 . 因此,必要的更改将如下所示:
您还需要将该资源移动到
drawable
目录,在那里它会更有意义,因为它本身不是颜色选择器 .然后你必须像这样创建
res/drawable/selected_state.xml
文件:最后,你会像这样使用它:
Note :OP获取图像资源的原因可能是因为他试图仅引用仍然在颜色目录中的资源但是使用
@drawable
所以他最终导致了ID冲突,选择了错误的资源 .希望这仍然可以帮助某人,即使OP可能已经,我希望,现在解决了他的问题 .
Benoit的解决方案可行,但您实际上不需要承担绘制形状的开销 . 由于颜色可以绘制,只需在/res/values/colors.xml文件中定义颜色:
然后在你的选择器中使用:
以上更简单的解决方案:
保存在drawable文件夹中,你很高兴 .
即便如此 .
我为每个项添加了
android:drawable
属性,它们的值是颜色 .那么,为什么他们说
color
是selector
的属性之一?他们不认为android:drawable
是必需的 .Color State List Resource
对于谁在不创建背景扇区的情况下进行搜索,只需将这些行添加到
TextView
也可以选择使用: