Как получить основной цвет материальной темы в xml drawable?

Я пытаюсь определить круглый 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. Так что обходной путь для этого?

Ответ 1

Если вы используете API 21 или выше, вы должны использовать:

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

Для более старых API вы должны просто ввести:

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

Ответ 2

Является ли ваш цвет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>

Ответ 3

Вы не можете использовать значения атрибутов в drawables. Лучше всего использовать полупрозрачный белый/черный (в зависимости от того, светлый или темный), например, # 44FFFFFF и наложение на основной цвет фона. Вы заметите, что большинство материалов - это светлее/темнее, чем основной цвет фона...

В противном случае, если вам нужен дублированный цвет, вам придется использовать @color/myPrimaryColor, который должен быть таким же, как и вы определили в своей теме как primaryColor.