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>
TextView
的clickable
属性是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"
- 将jar库导入到android-studio中
- 我在哪里可以放置在Android Studio中的“资产”文件夹?
- 无法parsing主机“<url here>”; 没有与主机名关联的地址
- TaskStackBuilder和额外的后退堆栈
- 如何使LinearLayout可滚动
- 如何检查WiFi或3Gnetworking在Android设备上可用
- Android:长按一下ExpandableListView的子视图?
- Android上的Integer.parseInt和NumberFormatException
- Android Studio:如何在运行或debugging之前自动卸载APK(或执行adb命令)?