Ответ 1
Если вы используете API 21 или выше, вы должны использовать:
<solid android:color="?android:colorPrimary"></solid>
Для более старых API вы должны просто ввести:
<solid android:color="?colorPrimary"></solid>
Я пытаюсь определить круглый 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. Так что обходной путь для этого?
Если вы используете API 21 или выше, вы должны использовать:
<solid android:color="?android:colorPrimary"></solid>
Для более старых API вы должны просто ввести:
<solid android:color="?colorPrimary"></solid>
Является ли ваш цветPrimary сохраненным в вашем color.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>
Вы не можете использовать значения атрибутов в drawables. Лучше всего использовать полупрозрачный белый/черный (в зависимости от того, светлый или темный), например, # 44FFFFFF и наложение на основной цвет фона. Вы заметите, что большинство материалов - это светлее/темнее, чем основной цвет фона...
В противном случае, если вам нужен дублированный цвет, вам придется использовать @color/myPrimaryColor, который должен быть таким же, как и вы определили в своей теме как primaryColor.