Android ColorStateList 代碼動態設置不同狀態的顏色

ColorStateList功能在XML中的使用

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:color="hex_color"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>

在XML中我們可以通過不同狀態設置true然後設置color="hex_color"來達到不同狀態顯示不同顏色的目的,下面是總結的狀態表

狀態 效果
state_pressed 指當用戶點擊或者觸摸該控件的狀態
state_focused 指當前控件獲得焦點時的狀態
state_selected 指當前控件選中的狀態
state_checkable 僅在當控件具有被勾選和不被勾選的狀態間轉換時才起作用
state_checked 當前控件處於被勾選(check的狀態)
state_enabled 表示當前控件出於可用的狀態,比如可以被點擊
state_window_focused 指當前窗口獲得焦點時的狀態

通過以上的設置我們就可以使用Color state list resource

在代碼裏動態設置狀態色

public ColorStateList (int[][] states, int[] colors)

以上是ColorStateList的構造方法。第一個參數是狀態,也就是上述表格中的狀態;第二個參數是顏色,是第一個參數二維數組中的第一維數組對應狀態集合對應的顏色。聽上去很繞口,看代碼就可以輕易瞭解了

private ColorStateList createColorStateList(int selected,int normal) {
        int[] colors = new int[] { selected,  normal};
        int[][] states = new int[2][];
        states[0] = new int[] { android.R.attr.state_selected , android.R.attr.state_enabled};
        states[1] = new int[] { android.R.attr.state_enabled };
        ColorStateList colorList = new ColorStateList(states, colors);
        return colorList;
    }

上述代碼states[0]一維數組裏有兩個狀態,當着兩個狀態都成立的時候selected這個顏色才生效,所以這裏回答了一個問題,爲什麼第一個參數是二維的,因爲可以對應多個狀態。然後我們把顏色設置即可。

textView.setTextColor(createColorStateList(Color.parseColor("#333ccc"),R.color.color_333333));

這樣就可以代碼動態設置狀態顏色了。

注意:這個狀態是android.R.attr.裏的

好了,這就是代碼設置狀態顏色的全部了~有用點個讚唄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章