如何从我的应用程序主题中获取原色?
How can I get the primary color from my app theme?
在我的 Android java 代码中,如何引用主题中设置的颜色 "colorPrimary"?
我有以下主题定义:
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="colorPrimary">@color/myColor1</item>
<item name="colorPrimaryDark">@color/myColor2</item>
<item name="colorControlNormal">@color/myColor3</item>
<item name="colorControlActivated">@color/myColor4</item>
</style>
我可以直接引用颜色资源 (R.color.myColor1),但我更愿意引用主题的 primaryColor 设置,以便在将来 colorPrimary 发生变化时保持一致。
这可能吗?
使用这个:
TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true);
int color = typedValue.data;
您可以使用 ?attr/colorPrimary
作为 XML 中的颜色来获取当前的主要(或 primaryVariant 等)颜色。
例如,我有一个 SVG,我需要将背景设置为与我当前的原色相同。所以我可以这样做:
<path
android:fillColor="?attr/colorPrimary"
android:pathData="M0,0h800v800h-800z" />
即使更改主题,背景颜色也会自动更改。
在我的 Android java 代码中,如何引用主题中设置的颜色 "colorPrimary"?
我有以下主题定义:
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="colorPrimary">@color/myColor1</item>
<item name="colorPrimaryDark">@color/myColor2</item>
<item name="colorControlNormal">@color/myColor3</item>
<item name="colorControlActivated">@color/myColor4</item>
</style>
我可以直接引用颜色资源 (R.color.myColor1),但我更愿意引用主题的 primaryColor 设置,以便在将来 colorPrimary 发生变化时保持一致。
这可能吗?
使用这个:
TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true);
int color = typedValue.data;
您可以使用 ?attr/colorPrimary
作为 XML 中的颜色来获取当前的主要(或 primaryVariant 等)颜色。
例如,我有一个 SVG,我需要将背景设置为与我当前的原色相同。所以我可以这样做:
<path
android:fillColor="?attr/colorPrimary"
android:pathData="M0,0h800v800h-800z" />
即使更改主题,背景颜色也会自动更改。