如何从我的应用主题中获取原色?

May*_*yec 13 android android-xml android-theme android-styles android-color

在我的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>
Run Code Online (Sandbox Code Playgroud)

我可以直接引用颜色资源(R.color.myColor1),但我更喜欢引用主题的primaryColor设置,以便在将来colorPrimary更改时保持一致.

这可能吗?

Byt*_*ter 34

用这个:

TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true);
int color = typedValue.data;
Run Code Online (Sandbox Code Playgroud)

  • 这似乎变得不同的颜色,看起来像通用的 Android 蓝色。难道 getTheme() 正在获取默认主题,而不是实际为应用程序定义的主题? (2认同)
  • @Mayec /对于现在面临这个问题的任何人 - 尝试使用“typedValue.resourceId”,这对我有用。 (2认同)

Mah*_*hdi 11

您可以通过使用 XML 中的颜色来获取当前的主要(或primaryVariant等)颜色?attr/colorPrimary

例如,我有一个 SVG,我需要将背景设置为与当前的原色相同。所以我可以这样做:

<path
        android:fillColor="?attr/colorPrimary"
        android:pathData="M0,0h800v800h-800z" />
Run Code Online (Sandbox Code Playgroud)

即使您更改主题,背景颜色也会自动更改。