1.用selector可以让控件根据状态的不同呈现不同的形态。例如按钮选中、不选中,显示不同的背景图片。selector的实现如下:
a) 定义一个selector文件,放在drawable目录下,为.xml格式。个图片资源也要准备好放在drawable目录下。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true"
android:drawable="@drawable/mic1"/>
<item android:state_pressed="true"
android:drawable="@drawable/mic1"/>
<item android:state_selected="true"
android:drawable="@drawable/mic1"/>
<item android:drawable="@drawable/mic2"/>
</selector>
b) 使用定义好的selector。
在界面的layout里面,定义button控件并使用selector
<Button
android:layout_width="50dp"
android:layout_height="60dp"
android:id="@+id/button2"
android:layout_margin="20dp"
android:focusable="true"
android:clickable="true"
android:background="@drawable/my_selector"
android:cacheColorHint="@android:color/transparent"/>
这样selector就和控件关联了。
2.如果有多个这样的selector,文件会比较多,这时候也可以用java代码实现,用StateListDrawable类。
StateListDrawable drawable = new StateListDrawable();
//Non focused states
drawable.addState(new int[]{-android.R.attr.state_focused, -android.R.attr.state_selected, -android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.pic1));
drawable.addState(new int[]{-android.R.attr.state_focused, android.R.attr.state_selected, -android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.pic2));
//Focused states
drawable.addState(new int[]{android.R.attr.state_focused,-android.R.attr.state_selected, -android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.pic2));
drawable.addState(new int[]{android.R.attr.state_focused,android.R.attr.state_selected, -android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.pic2));
//Pressed
drawable.addState(new int[]{android.R.attr.state_selected, android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.pic2));
drawable.addState(new int[]{android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.pic2));
TextView textView = (TextView) findViewById(R.id.TextView_title);
textView.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
//此时用的是textView控件
记得设置textview的属性为可点击的、可聚焦的:
android:focusable="true"
android:clickable="true"
3.控件的属性总结:
pressed: 按下后未松开前是pressed,表示按下。
focused: 松开后当前对象获得焦点,是focused,同一时刻只能focus一个控件。
selected: 表示选中状态,同一时刻可以多个控件共同拥有selected状态。