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.裏的
好了,這就是代碼設置狀態顏色的全部了~有用點個讚唄