Android代码中使用ColorStateList
Android代码中设置selector
ColorStateList是从在应用程序资源目录的“color”子目录目录中定义的XML资源文件创建的。XML文件包含一个“选择器”元素,其中包含许多“项目”元素
这定义了一组状态规范/颜色对,其中每个状态规范指定了视图必须处于或不处于其中的一组状态,并且颜色指定了与该规范关联的颜色。
android:alpha Alpha应用于基础色。
android:color 此状态的基础颜色。
创建方法
- 构造方法
ColorStateList colorStateList =
new ColorStateList(new int[][]
{{android.R.attr.state_pressed,android.R.attr.state_enable},
{android.R.attr.state_pressed}},
new int[]{Color.RED,Color.BLUE});
这里有两个点要注意,第一个参数是二维数组,数组的第一级个数和后面的颜色是一一对应
,如果颜色多了会用前几个对应该的颜色,如果颜色少了可能会文字不见了
ColorStateList的状态false处理
在网上找了很多方案没找到,最后只能自己来
当要设置属性 android.R.attr.state_pressed = false
时,只要在第一个数组里面的属性名前加 '-' 例如
ColorStateList colorStateList = new ColorStateList(
new int[][]{{-android.R.attr.state_enable},{android.R.attr.state_enable}},
new int[]{Color.RED,Color.BLUE});
此时-android.R.attr.state_enable
就是设置按钮不可用的状态也就是在xml中定义的android:state_enabled="false"
- 使用xml文件
- 第一种加载方式
Resources resource=getContext().getResources();
ColorStateList colorStateList=resource.getColorStateList(R.color.selector,context.getTheme());
- 第二种加载方式
@SuppressLint("ResourceType") XmlResourceParser xpp=getResources().getXml(R.color.selector);
try {
ColorStateList colorStateList= ColorStateList.createFromXml(getResources(),xpp);
} catch (Exception e) {
}
然后拿到colorStateList直接调用setColor方法就好了