转载请标注:
披萨大叔的博客 http://blog.csdn.net/qq_27258799/article/details/51509503
今天遇到一个十分奇怪的问题,我在代码里给TextView设置颜色,如下:
tvTips.setTextColor(R.Color.red);
但是结果显示,这个TextView竟然是紫色的!搞了好久才发现原来setTextColor是不能直接用资源ID映射资源的,它会直接把资源ID当作颜色值来用,Talk is cheap, show me the code.
我们直接对比下 setTextColor 和 setText 的源码:
//这里的color参数,是颜色值,而不是资源的ID
public void setTextColor(int color) {
mTextColor = ColorStateList.valueOf(color);
updateTextColors();
}
//这里的才是资源ID
public final void setText(int resid) {
setText(getContext().getResources().getText(resid));
}
切记,博主已经踩过坑了。我们只能这样:
int color = context.getResources().getColor(R.Color.XXX);
tv_text.setTextColor(color);
最后再重复一遍:千万不要用 setTextColor(R.Color.XXX)
;