小编典典

当它是参考(主题)时以编程方式获取颜色值

all

考虑一下:

style.xml

<style name="BlueTheme" parent="@android:style/Theme.Black.NoTitleBar">
    <item name="theme_color">@color/theme_color_blue</item>
</style>

attrs.xml

<attr name="theme_color" format="reference" />

color .xml

<color name="theme_color_blue">#ff0071d3</color>

所以 主题颜色 是由主题引用的。如何以编程方式获取 theme_color
(参考)?通常我会使用getResources().getColor()但在这种情况下不会使用,因为它被引用了!


阅读 59

收藏
2022-08-03

共1个答案

小编典典

这应该做的工作:

TypedValue typedValue = new TypedValue();
Theme theme = context.getTheme();
theme.resolveAttribute(R.attr.theme_color, typedValue, true);
@ColorInt int color = typedValue.data;

还要确保在调用此代码之前将主题应用于您的活动。要么使用:

android:theme="@style/Theme.BlueTheme"

在您的清单或电话中(在您致电之前setContentView(int)):

setTheme(R.style.Theme_BlueTheme)

onCreate().

我已经用您的价值观对其进行了测试,并且效果很好。

2022-08-03