网上有很多这方面的资料,但都不能用。
像下面这个:
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 默认时的背景图片-->
<item android:drawable="@drawable/pic1" />
<!-- 没有焦点时的背景图片 -->
<item android:state_window_focused="false"
android:drawable="@drawable/pic1" />
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->
<item android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/pic2" />
<!-- 触摸模式下单击时的背景图片-->
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/pic3" />
<!--选中时的图片背景-->
<item android:state_selected="true" android:drawable="@drawable/pic4" />
<!--获得焦点时的图片背景-->
<item android:state_focused="true" android:drawable="@drawable/pic5" />
</selector>
原因是定义的顺序错了。
Android控件的状态有很多,在编译器中会给出提示,但不同的控件能够使用的状态的类别是不同的,像Button和CheckBox就有独有的状态,Button有android:state_pressed,CheckBox有android:state_checked。以Button为例,Button经常使用的状态有:android:state_window_focused,android:state_enabled,android:state_pressed,android:state_focused。这四种常用的状态能有很多组合,但这四种状态是有内在的联系的。
如下图:
这四种状态按联系分类,可分为状态互相依赖和状态不依赖。像android:state_window_focused和android:state_enabled,就是状态不互相依赖的,所以这两个有四种组合
<item android:state_window_focused="true" andriod:state_enabled="true" android:drawable="">
<item android:state_window_focused="true" android:state_enabled="false" android:drawable="">
<item android:state_window_focused="false“ android:state_enabled="false" android:drawable="">
<item android:state_window_focused="false" android:state_enabled="true" android:drawable="">
而android:state_pressed和android:state_window_focused是不依赖的,android:state_pressed和android:state_enabled是依赖的。
android:state_focused在手机上没有显示,但是如果在电视上,按钮应该就有android:state_focused的状态了。android:state_pressed和android:state_pressed两个状态在同一时间只能存在一个,并且对于Button来说,android:state_focused是依赖android:state_enabled。但对于EditText来说,android:state_foucsed不依赖android:state_enabled。
selector匹配第一个能够匹配的。所以说<item>中的状态应该是从最受限的状态到最自由的状态排列