例如一个TextView使用了如下的selector:
<
TextView
android:id
=
"@+id/TextView_title"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:focusable
=
"true"
android:drawableTop
=
"@drawable/selector_tabwidget_icon"
android:textAlignment
=
"center"
/>
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
selector
xmlns:android
=
"http://schemas.android.com/apk/res/android"
>
<!-- Non focused states -->
<
item
android:state_focused
=
"false"
android:state_selected
=
"false"
android:state_pressed
=
"false"
android:drawable
=
"@drawable/contact"
/>
<
item
android:state_focused
=
"false"
android:state_selected
=
"true"
android:state_pressed
=
"false"
android:drawable
=
"@drawable/contact_sel"
/>
<!-- Focused states -->
<
item
android:state_focused
=
"true"
android:state_selected
=
"false"
android:state_pressed
=
"false"
android:drawable
=
"@drawable/contact_sel"
/>
<
item
android:state_focused
=
"true"
android:state_selected
=
"true"
android:state_pressed
=
"false"
android:drawable
=
"@drawable/contact_sel"
/>
<!-- Pressed -->
<
item
android:state_selected
=
"true"
android:state_pressed
=
"true"
android:drawable
=
"@drawable/contact_sel"
/>
<
item
android:state_pressed
=
"true"
android:drawable
=
"@drawable/contact_sel"
/>
</
selector
>
代码:
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.contact));
drawable.addState(
new
int
[]{-android.R.attr.state_focused, android.R.attr.state_selected, -android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.contact_sel));
//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.contact_sel));
drawable.addState(
new
int
[]{android.R.attr.state_focused,android.R.attr.state_selected, -android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.contact_sel));
//Pressed
drawable.addState(
new
int
[]{android.R.attr.state_selected, android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.contact_sel));
drawable.addState(
new
int
[]{android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.contact_sel));
TextView textView = (TextView) findViewById(R.id.TextView_title);
textView.setCompoundDrawablesWithIntrinsicBounds(
null
, drawable,
null
,
null
);
注意里面的“-”号,当XML的设定是false时,就需要使用资源符号的负值来设定。