使用主题属性中的颜色无法正常工作

时间:2019-03-28 10:40:09

标签: java android styles themes attr

我想将主题属性的颜色用于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工作,以及返回值之间的区别是什么? 上下文是正确的。

2 个答案:

答案 0 :(得分:0)

我认为更改文本颜色的最佳解决方案是使用资源文件中的颜色。

如果您正在活动:

textView.setTextColor(getResources().getColor(R.color.colorAccent));

如果您处于碎片状态:

textView.setTextColor(getContext().getResources().getColor(R.color.colorAccent));

答案 1 :(得分:0)

寻找解决方案!如果将颜色设置为colorStateList-第一种方法始终返回Color.TRANSPARENT。因此,最好的解决方案是使用第二种方法