【问题标题】:How to get primary color of material theme in xml drawable?如何在 xml drawable 中获取材质主题的原色?
【发布时间】:2014-10-23 18:40:05
【问题描述】:

我正在尝试定义需要材质主题原色的圆形可绘制对象。这是我的 xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
    <solid android:color="?attr/colorPrimary"></solid>
</shape>

但我收到了InflateException。我读过我们不能在可绘制的 xml 中使用属性。那么有什么解决方法吗?

【问题讨论】:

    标签: android material-design


    【解决方案1】:

    如果您使用 API 21 或更高版本,则应使用:

    <solid android:color="?android:colorPrimary"></solid>
    

    对于较旧的 API,您只需键入:

    <solid android:color="?colorPrimary"></solid>
    

    【讨论】:

    • 如果您希望为您的应用程序设置主题,请尝试将在 colors.xml 中定义的颜色添加到您的应用程序主题中的 styles.xml 文件中,如下所示, 现在,当您将主题颜色分配给布局中的视图(或任何形状),它将采用当前活动主题的 colorPrimary。
    • 我使用 ?colorPrimary 作为可绘制对象的笔触颜色,该可绘制对象用作 RelativeLayout 的背景,当我在运行时添加背景时,笔触仅显示黑色。即使 colorPrimary 从来不是黑色的。如果我在 drawable>XML 文件中硬编码颜色的十六进制代码,它会完美显示。有谁知道如何解决?谢谢
    【解决方案2】:

    您的 colorPrimary 是否存储在您的 colors.xml 中?如果是这样,只需像 @color/colorPrimary 一样引用它。

    如果没有,只需在 colors.xml 中定义并引用它。这些是直接来自源代码的默认蓝绿色。我认为 material_deep_teal_500 是您正在寻找的。​​p>

    <!-- Primary & accent colors -->
    
    <color name="material_deep_teal_200">#ff80cbc4</color>
    <color name="material_deep_teal_500">#ff009688</color>
    
    <color name="material_blue_grey_800">#ff37474f</color>
    <color name="material_blue_grey_900">#ff263238</color>
    <color name="material_blue_grey_950">#ff21272b</color>
    

    【讨论】:

      【解决方案3】:

      您不能在可绘制对象中使用属性值。 您最好使用半透明的白色/黑色(取决于您是浅色还是深色),例如 #44FFFFFF 并覆盖在原色背景上。您会注意到大多数材质可绘制对象在原色背景上的阴影较浅/较深...

      否则,如果您需要复制颜色 - 您必须使用 @color/myPrimaryColor - 这应该与您在主题中定义为 primaryColor 的颜色相同。

      【讨论】:

        猜你喜欢
        • 2020-06-16
        • 1970-01-01
        • 2019-11-19
        • 2018-10-12
        • 1970-01-01
        • 2018-07-03
        • 2021-05-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多