【问题标题】:How can I get the primary color from my app theme?如何从我的应用主题中获取原色?
【发布时间】:2026-01-06 21:25:17
【问题描述】:

在我的 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 发生变化时保持一致。

这可能吗?

【问题讨论】:

    标签: android android-xml android-theme android-styles android-color


    【解决方案1】:

    使用这个:

    TypedValue typedValue = new TypedValue();
    getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true);
    int color = typedValue.data;
    

    【讨论】:

    • 这似乎得到了不同的颜色,看起来像普通的安卓蓝色。会不会是 getTheme() 获取的是默认主题,而不是实际为应用定义的主题?
    • 抱歉。如果您在 onCreate 之外使用此片段,则需要使用 mActivity.getTheme()。 (onCerate: mActivity = this)
    • 它应该可以工作。我在片段内部使用了很多次,它在其他片段内部并且零问题。可以的话直接用gettheme调用,不行的话MainActivity.getTheme...或者getactivity.getTheme...
    • @Mayec / 对于现在面临此问题的任何人 - 尝试使用 typedValue.resourceId,这对我有用。
    • 对于任何获得不同颜色的人,请检查 R 类是您应用程序的资源类,而不是 android.R 类
    【解决方案2】:

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

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

    <path
            android:fillColor="?attr/colorPrimary"
            android:pathData="M0,0h800v800h-800z" />
    

    即使你改变了主题,背景颜色也会自动改变。

    【讨论】:

      【解决方案3】:

      此答案仅适用于初学者。

      我会在毕加索的帮助下做到这一点。

      使用互联网URL在android中加载图像的一行代码 将此代码粘贴到您要加载此图像的位置。

      Picasso.get().load("https://example.com/image-url.png").into(imageView);
      

      在模块build.grade

      添加依赖

          implementation 'com.squareup.picasso:picasso:2.71828'
      

      如果你想要更多的自定义,那么你可以使用这个参考

      参考:

      https://square.github.io/picasso/ https://github.com/square/picasso

      【讨论】: