ListView中有时候又这样的需求,当选中某项listView的时候,需求是改变listiew的背景颜色,如果用resource文件会有缓存问题,背景显示错误,那么直接用16进制表示颜色即可。如0xFF7AACC6. 注意表示透明度的需要写上,否则显示不正确
ListView源码中两个设置背景方法的不同点:
@RemotableViewMethod
public void setBackgroundResource(int resid) {
if (resid != 0 && resid == mBackgroundResource) {
return;
}
Drawable d= null;
if (resid != 0) {
d = mResources.getDrawable(resid);
}
setBackground(d);
mBackgroundResource = resid;
}
上面使用资源文件设置背景颜色
@RemotableViewMethod
public void setBackgroundColor(int color) {
if (mBackground instanceof ColorDrawable) {
((ColorDrawable) mBackground).setColor(color);
} else {
setBackground(new ColorDrawable(color));
}
}
上面是使用16进制数设置背景颜色,
可以看出两个方法实际都调用了setBackground(Drawable background)方法设置背景颜色,第一种使用资源设置背景的方法会判断资源与当前资源,如果要设置的颜色与现在的颜色相同,那么直接返回,不重新设置背景色...而第二种方法,会直接新建一个对象,所以无论如何都是可以刷新背景颜色的。