以编程方式访问Android参考样式颜色属性

时间:2018-03-18 20:58:55

标签: android

在XML资源中,我可以使用这样的系统引用样式颜色(只是一个示例):

android:textColor="?android:itemTextColor">

我想知道如何以编程方式在java中获取该颜色,当我需要设置这样的颜色时(无关的另一个例子):

button.setBackgroundColor(myColor);

如何将myColor设为?android:itemTextColor

2 个答案:

答案 0 :(得分:1)

这样的事情有帮助吗?

TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.textColorHint, typedValue, true);
button.setBackgroundColor(typedValue.data);

答案 1 :(得分:1)

您所看到的是一个属性,它是资源的参考(不一定是颜色)。属性由Theme解析,这意味着可以根据解析后的Theme将相同的属性解析为不同的值。

如果你在Acitivity,你可以(也可能应该)使用Activity的主题

val typedValue = TypedValue()
val found = theme.resolveAttribute(android.R.attr.textColorHint,typedValue, true)

之后,您应该检查您已解决的值的类型

when(typedValue.type){
    TypedValue.TYPE_INT_COLOR_ARGB8 -> ...
    TypedValue.TYPE_INT_COLOR_ARGB4 -> ...
    ...
}

然后你可以(最终)使用存储在typedValue.data

中的颜色值