我有一个包含drawable和text的按钮。我希望按钮的背景与提供的正常背景不同(最好是纯色)。这很好用,我只是使用XML文件中的android:background
属性并相应地分配颜色。但是,我希望在选择或聚焦时将背景更改为不同的颜色(状态选择器)。
我试图在一个带有定义颜色的drawable文件夹中创建一个选择器(在处理按钮文本时效果很好),如下所示:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="false" android:color="@color/green" />
<item android:state_focused="true" android:state_pressed="true" android:color="@color/green" />
<item android:state_focused="false" android:state_pressed="true" android:color="@color/green" />
<item android:color="@color/white" />
</selector>
并将此xml设置为android:background
属性,如下所示:
android:background="@drawable/button_state"
但这导致一个力量关闭:
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/button_state.xml from drawable resource ID #0x7f020070
但资源就在那里。你能不自定义背景状态?如果可以,怎么样?或者我做错了什么?谢谢你的帮助!
答案 0 :(得分:10)
您发布的xml适用于color state list,而不是状态列表drawable。试试这个:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="false" >
<shape><solid android:color="@color/green"/></shape>
</item>
. . .
</selector>
或者,将现有文件放入res/color
并像使用任何其他颜色一样使用它。但是,我不记得你是否可以直接使用颜色状态列表作为视图的背景。
答案 1 :(得分:2)
实施例
XML file saved at res/color/button_text.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="#ffff0000"/> <!-- pressed -->
<item android:state_focused="true"
android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/> <!-- default -->
</selector>
This layout XML will apply the color list to a View:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:textColor="@color/button_text" />
<强> @颜色/ BUTTON_TEXT 强>
<强> RES /颜色/ button_text.xml 强>
这是Google在ColorStateList资源中提供的示例: https://developer.android.com/guide/topics/resources/color-list-resource.html
我认为必须使用colorStateList来改变小部件的textView颜色。