TextView的背景颜色select器

我试图改变一个Android TextView小部件的背景颜色,当用户触摸它。 我为此创build了一个select器,它存储在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> 

TextViewclickable属性是true ,以防感兴趣。

当我把这个select器作为android:background="@color/selector"分配给TextView ,我在运行时收到以下exception:

错误/ AndroidRuntime(13130):引起:org.xmlpull.v1.XmlPullParserException:二进制XML文件行#6:标记需要“drawable”属性或子标记定义drawable

当我将该属性更改为可绘制的时,它可以工作,但是结果看起来完全错误,因为ID似乎被解释为图像引用而不是颜色引用(如“drawable”所示)。

令我困惑的是我可以直接设置一个颜色参考,例如“@ color / black”作为背景属性。 这是按预期工作。 使用select器不起作用。

我也可以使用select器作为textColor没有问题。

在Android中向TextView应用背景颜色select器的正确方法是什么?

这里的问题是你不能使用颜色select器来定义背景颜色,你需要一个可绘制的select器。 所以,必要的改变将如下所示:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/selected_state" /> </selector> 

您还需要将该资源移动到drawable目录,因为它本身不是颜色select器,所以更有意义。

那么你将不得不像这样创buildres/drawable/selected_state.xml文件:

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/semitransparent_white" /> </shape> 

最后,你会像这样使用它:

 android:background="@drawable/selector" 

注意 :OP得到一个图像资源的原因可能是因为他试图引用他仍然在color目录中的资源,但是使用了@drawable所以他最后@drawable一个ID冲突,select了错误的资源。

希望这样做仍然可以帮助某人,即使OP有可能,现在我希望能解决他的问题。

Benoit的解决scheme是有效的,但是你并不需要花费大量的时间来绘制一个graphics。 由于颜色可以绘制,只需在/res/values/colors.xml文件中定义颜色:

 <?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="semitransparent_white">#77ffffff</drawable> </resources> 

然后在你的select器中使用

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/semitransparent_white" /> </selector> 

上述更简单的解决scheme:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <color android:color="@color/semitransparent_white" /> </item> <item> <color android:color="@color/transparent" /> </item> </selector> 

保存在可绘制的文件夹,你很好去。

即使这个工程。

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@color/dim_orange_btn_pressed" /> <item android:state_focused="true" android:drawable="@color/dim_orange_btn_pressed" /> <item android:drawable="@android:color/white" /> </selector> 

我为每个项目添加了android:drawable属性,它们的值是颜色。

顺便说一句,为什么他们说color是select者的属性之一呢? 他们不写这个android:drawable是必需的。

颜色状态列表资源

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:color="hex_color" android:state_pressed=["true" | "false"] android:state_focused=["true" | "false"] android:state_selected=["true" | "false"] android:state_checkable=["true" | "false"] android:state_checked=["true" | "false"] android:state_enabled=["true" | "false"] android:state_window_focused=["true" | "false"] /> </selector> 

对于谁正在search,而不创build一个背景部门,只要将这些行添加到TextView

 android:background="?android:attr/selectableItemBackground" android:clickable="true" 

也为了使其可选用途:

 android:textIsSelectable="true"