使用主题属性中的颜色无法按预期工作
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
。所以,最好的解决方案是使用第二种方法
我想为 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
。所以,最好的解决方案是使用第二种方法