State list可以根据对象的不同状态来显示不同的drawables。这个Drawable在定制某个具有内部状态的对象是尤其有用,比如按钮的“pressed”和“focused”。在XML文件中,StateList是通过Selector标签来定义的。
实例一:定义一个按钮,按钮按下时显示不同的颜色。
1)首先在drawable文件夹下定义两个xml文件,first和second来定义不同的显示属性。
first.xml文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#00FF00" />
</shape>
second.xml文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<gradient
android:angle="-90"
android:endColor="#FFFFFF"
android:startColor="#AA0000"
android:type="linear" />
</shape>
2)在drawable文件夹下定义button_drawable文件,指定StateList属性
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/first" android:state_pressed="true"/>//按下时显示的状态
<item android:drawable="@drawable/second"/>//默认状态
</selector>
3)在Layout文件中使用drawable文件
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/button_drawable"
android:text="Click me" />
运行结果: