通常selector 都是在drawable/color文件夾中定義好瀑焦,但有時候一些特殊需求需要我們動態(tài)通過代碼去更改,這個時候就要用到StateListDrawable 和 ColorStateList 了,這兩個分別是設(shè)置圖片和顏色的類
1俊犯、對不同狀態(tài)的控件設(shè)置不同的圖片(StateListDrawable)
通常我們在設(shè)置不同狀態(tài)下圖片不同時是這么寫的:比如checkBox
a招狸、定義一個selector文件
<?xml version= "1.0" encoding="utf-8">
<selector xmlns:android="http://schemas.android.com/apk/res/android">
? ? ? ? ? ?<item android:drawable="@drawable/ic_toolbar_huabuwan_selected" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android:state_checked="true"/>
? ? ? ? ? ? <item android:drawable="@drawable/ic_toolbar_huabuwan_normal" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android:state_checked="false"/>
</selector>
b、然后設(shè)置給checkBox
<CheckBox??
?android:layout_height="wrap_content"?
android:layout_width="wrap_content"??
android:background="@drawable/selector_check"/>
這是在圖標沒有定死的情況下老速,如果圖標是要動態(tài)替換則需要通過下面這種方式了
2、通過代碼動態(tài)設(shè)置圖標
/**
* 設(shè)置底部tab圖標
* @paramradioButton控件
* @paramdrawableNormal常態(tài)時的圖片
* @paramdrawableSelect選中時的圖片
*/
public void setSelectorDrawable(CheckBox cbButton,Drawable drawableNormal,Drawable drawableSelect){
? ? ? ? ? ? ? ? ? StateListDrawable drawable =newStateListDrawable();
? ? ? ? ? ? ? ? ?//選中
? ? ? ? ? ? ? ? ?drawable.addState(new int[]{android.R.attr.state_checked},drawableSelect);
? ? ? ? ? ? ? ? ?//未選中
? ? ? ? ? ? ? ? ?drawable.addState(new int[]{-android.R.attr.state_checked},drawableNormal);
? ? ? ? ? ? ? ? ?cbButton.setBackgroundDrawable(drawable);
}
同理selector的顏色也是如此設(shè)置凸主,設(shè)置顏色的類是ColorStateList
/**
* 設(shè)置底部tab文字顏色
* @paramradioButton控件
* @paramnormal正常時的顏色值
* @paramchecked選中時的顏色值
*/
public void setSelectorColor(RadioButton radioButton,intnormal,intchecked){
? ? ? ? ? ? ? int[] colors =new int[] { normal, checked,normal};
? ? ? ? ? ? ? int[][] states =new int[3][];
? ? ? ? ? ? ? states[0] =new int[] { -android.R.attr.state_checked};
? ? ? ? ? ? ? states[1] =new int[] { android.R.attr.state_checked};
? ? ? ? ? ? ? states[2] =new int[] {};
? ? ? ? ? ? ? ColorStateList colorStateList =newColorStateList(states,colors);
? ? ? ? ? ? ? radioButton.setTextColor(colorStateList);
}
注意:-android.R.attr.state_checked 和 android.R.attr.state_checked 的區(qū)別在于 “-” 號代表值里的true 和 false ,有“-”為false 沒有則為true