使用主题属性中的颜色无法按预期工作

Use color from theme attr don't work as expected

我想为 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 工作而不为另一个工作,以及 return 值之间的区别是什么。 上下文正确。

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

如果你在 activity:

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

如果你在片段中:

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

寻找解决方案!如果颜色设置为 colorStateList - 第一种方法总是 return Color.TRANSPARENT。所以,最好的解决方案是使用第二种方法