ColorStateList
参考:https://blog.csdn.net/zjh_1110120/article/details/89438309
ColorStateList(颜色状态列表)是一个可以定义在 XML 布局文件中,并最终根据 ColorStateList 应用的 View 的状态显示不同颜色的对象。
文件位置:res/color/filename.xml
应用方式:
- In Java: R.color.filename
- In XML: @[package:]color/filename
语法:
<?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>
属性 | 定义 | 取值范围 |
---|---|---|
color | 不同状态的颜色值 | 十六进制的颜色值。可以是如下格式: #RGB #ARGB #RRGGBB #AARRGGBB |
state_pressed | View 按下的状态 | true,false。true,按下;false,默认状态,即没有按下之前的状态。 |
state_selected | View 选中的状态 | true,false。true,选中;false,未选中。 |
示例:
//1. text_color_state_list.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/green_700" android:state_pressed="true" />
<item android:color="@color/grey_700" android:state_pressed="false" />
<!--默认项-->
<item android:color="@color/grey_700" />
</selector>
注意:
1.ColorStateList 中定义的默认 Item 一定要放在最下面
2.ColorStateList 是不能用于 View 的 Background
3.StateListDrawable 是不能用于 TextView 系的 TextColor
代码控制:
private void initView(){
mAlphaB = findViewById(R.id.alphabet_b);
ColorStateList colorStateList = createColorStateList(getResources().getColor(R.color.green_700), getResources().getColor(R.color.grey_700));
mAlphaB.setTextColor(colorStateList);
}
private ColorStateList createColorStateList(int pressed, int normal) {
//状态
int[][] states = new int[2][];
//按下
states[0] = new int[] {android.R.attr.state_pressed};
//默认
states[1] = new int[] {};
//状态对应颜色值(按下,默认)
int[] colors = new int[] { pressed, normal};
ColorStateList colorList = new ColorStateList(states, colors);
return colorList;
}