Android ColorStateList可以添加xml文件可以结合selector使背景颜色变化更加自由。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@drawable/yellow_btn" />
<item android:state_selected="true" android:drawable="@color/WHITE" />
<item android:drawable="@color/WHITE" />
</selector>
selector的基本含义和用法可以参照我的另一篇博客,
两种方式进行调用:
1.Button btn=(Button)findViewById(R.id.btn);
Resources resource=(Resources)getBaseContext().getResources();
ColorStateList csl=(ColorStateList)resource.getColorStateList(R.color.button_text);
if(csl!=null){
btn.setTextColor(color_state_list);//设置按钮文字颜色
}
2.
XmlResourceParser xpp=Resources.getSystem().getXml(R.color.button_text);
try {
ColorStateList csl= ColorStateList.createFromXml(getResources(),xpp);
btn.setTextColor(csl);
} catch (Exception e) {
// TODO: handle exception
}
就可以实现button或者text的按下或者不按下颜色的更换。
可能好多人都遇到过这种问题,就是给button设置颜色的时候,设置的颜色失效,出现黑色或者其他颜色,然后好多人就用colorstatelist进行替代,其实原因是参数调用不正确导致。
第1种:tv.setTextColor(android.graphics.Color.RED);//系统自带的颜色类
第2种:tv.setTextColor(0xffff00ff);//0xffff00ff是int类型的数据,分组一下0x|ff|ff00ff,0x是代表颜色整数的标记,ff是表示透明度,ff00ff表示颜色,注意:这里ffff00ff必须是8个的颜色表示,不接受ff00ff这种6个的颜色表示。
第3种:tv.setTextColor(this.getResources().getColor(R.color.red));//通过获得资源文件进行设置。根据不同的情况R.color.red也可以是R.string.red或者R.drawable.red,当然前提是需要在相应的配置文件里做相应的配置,如:
<color name="red">#FF0000</color>
< drawable name="red">#FF0000</drawable>
< string name="red">#FF0000</string>
注意上面的第三种方法,千万不能把自己定义的颜色直接当成参数,例如:
tv.setTextColor(R.color.red);这种情况会出现颜色错误!
若有问题请留言,若转载注明出处。