Android代码设置selector ColorStateList

皮煜
2023-12-01

Android代码中使用ColorStateList

Android代码中设置selector

ColorStateList是从在应用程序资源目录的“color”子目录目录中定义的XML资源文件创建的。XML文件包含一个“选择器”元素,其中包含许多“项目”元素
这定义了一组状态规范/颜色对,其中每个状态规范指定了视图必须处于或不处于其中的一组状态,并且颜色指定了与该规范关联的颜色。

android:alpha	Alpha应用于基础色。 
android:color	此状态的基础颜色。

创建方法

  1. 构造方法
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"

  1. 使用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方法就好了

 类似资料: