Android 使用代碼設置selector 的圖片或文字顏色

通常selector 都是在drawable/color文件夾中定義好,但有時候一些特殊需求需要我們動態(tài)通過代碼去更改,這個時候就要用到StateListDrawable 和 ColorStateList 了,這兩個分別是設置圖片和顏色的類

1、對不同狀態(tài)的控件設置不同的圖片(StateListDrawable)

通常我們在設置不同狀態(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、然后設置給checkBox

<CheckBox??

?android:layout_height="wrap_content"?

android:layout_width="wrap_content"??

android:background="@drawable/selector_check"/>

這是在圖標沒有定死的情況下,如果圖標是要動態(tài)替換則需要通過下面這種方式了

2、通過代碼動態(tài)設置圖標

/**

* 設置底部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的顏色也是如此設置,設置顏色的類是ColorStateList

/**

* 設置底部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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容