我想将主题属性的颜色用于textView.setTextColor()
。我找到了方法:
public static int getColor(int attr, Resources.Theme theme) {
TypedValue value = new TypedValue();
theme.resolveAttribute(attr, value, true);
return value.data;
}
,它对某些TextView
无效。例如,它适用于R.attr.colorPrimary
(文本变为红色),不适用于R.attr.colorPrimarySelector
(我的自定义属性)(colorPrimarySelector
是蓝色的,但文本变得透明)
但是如果我使用:
public static int getColor(int attr, Context context) {
TypedValue value = new TypedValue();
context.getTheme().resolveAttribute(attr, value, true);
return ContextCompat.getColor(context, value.resourceId);
}
,效果很好。 我不明白,为什么先为某个View或attr工作而又不为另一个View工作,以及返回值之间的区别是什么? 上下文是正确的。
答案 0 :(得分:0)
我认为更改文本颜色的最佳解决方案是使用资源文件中的颜色。
如果您正在活动:
textView.setTextColor(getResources().getColor(R.color.colorAccent));
如果您处于碎片状态:
textView.setTextColor(getContext().getResources().getColor(R.color.colorAccent));
答案 1 :(得分:0)
寻找解决方案!如果将颜色设置为colorStateList
-第一种方法始终返回Color.TRANSPARENT
。因此,最好的解决方案是使用第二种方法