如何在xml drawable中获取材质主题的原色?

时间:2014-10-23 18:40:05

标签: android material-design

我试图定义圆形drawable,它需要材质主题的原色。这是我的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。我读过我们不能在drawable xml中使用属性。那么任何解决方法呢?

3 个答案:

答案 0 :(得分:20)

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

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

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

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

答案 1 :(得分:2)

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

如果没有,只需在colors.xml中定义并引用它即可。这些是源代码中meterial的默认蓝绿色。我认为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>

答案 2 :(得分:0)

您无法在drawable中使用属性值。 您最好使用半透明的白色/黑色(取决于您是浅色还是深色),如#44FFFFFF并覆盖在原色背景上。您会注意到大多数材料可绘制的材料在原色背景下颜色较浅/较暗...

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