如何在xml drawable中获取Material主题的主色?

20

我试图定义一个圆形的可绘制元素,需要使用Material主题的原始颜色。这是我的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中使用属性。那么有什么解决方法吗?

3个回答

39

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

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

对于旧的API,您只需要输入以下内容:

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

如果您想为应用程序设置主题,可以在styles.xml文件中添加colors.xml中定义的颜色到应用程序主题中,如下所示进行一些小改进:**<style name="AppTheme.Dark" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/myColorPrimary</item> </style>** 现在,当您将主题颜色分配给布局中的视图(或任何形状)时,它将使用当前活动主题的colorPrimary。 - A.B.
我正在使用?colorPrimary作为一个可绘制对象的描边颜色,该可绘制对象被用作RelativeLayout的背景。当我在运行时添加背景时,描边只显示为黑色。即使colorPrimary从未是黑色。如果我在drawable>XML文件中硬编码颜色的十六进制代码,它就可以完美地显示。有人知道如何解决这个问题吗?谢谢。 - Waqas Younis

2

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

如果没有,请在colors.xml中定义并引用。这些是直接从源代码中获得的默认水鸭色材质。我认为material_deep_teal_500是您要寻找的颜色。

<!-- 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>

0

你不能在可绘制对象中使用属性值。 最好使用半透明的白色/黑色(取决于你是浅色还是深色),如#44FFFFFF,并覆盖在主要颜色背景上。你会注意到大多数材料可绘制对象都是在主要颜色背景上略微变浅/变暗的...

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接