Использование атрибута для изменения цвета рисуемого элемента

Я пытаюсь создать собственный Drawable с помощью атрибута, но у меня возникает ошибка наполнения

01-21 11:01:06.171: E/AndroidRuntime(13695): Caused by: android.content.res.Resources$NotFoundException: 
File res/drawable/action_bar_background.xml from drawable resource ID #0x7f020000

Мой action_bar_background.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
 android:shape="rectangle" >
    <gradient
        android:angle="90"
        android:endColor="?attr/ActionBarEndColor"
        android:startColor="?attr/ActionBarStartColor" 
    />
</shape>

Мой атрибут.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <attr name="ActionBarStartColor" format="reference|color" />
     <attr name="ActionBarEndColor" format="reference|color" />
</resources>

Мои темы.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.Theme1" parent="@style/Theme.GreenDroid.Light.NoTitleBar">
        <item name="ActionBarStartColor">@color/greyDark</item>
        <item name="ActionBarEndColor">@color/greyLight</item>
    </style>

    <style name="Theme.Theme2" parent="@style/Theme.GreenDroid.Light.NoTitleBar">
        <item name="ActionBarStartColor">@color/myRed</item>
        <item name="ActionBarEndColor">@color/myWhite</item>
    </style>
</resources>

Я не понимаю, почему, мой атрибут является ссылкой или цветом, если я «форсирую» цвет в themes.xml, это тоже не работает.

Кто-нибудь может помочь?

Я нашел этот вопрос но это не решает мою проблему.


person Ahmet    schedule 21.01.2012    source источник
comment
Единственное решение, которое я нашел, это использовать несколько рисуемых файлов с выбранным цветом и сделать ссылку в файле темы.   -  person Ahmet    schedule 24.01.2012
comment
Эта проблема была решена в предварительной версии Android L, как указано здесь: code.google. .com/p/android/issues/detail?id=26251   -  person Bianca Daniciuc    schedule 10.07.2014
comment
Я нашел это исправленным в Lollipop, но все еще не работает Kitkat и меньше   -  person Georgy Gobozov    schedule 21.11.2014


Ответы (1)


Всем хороших новостей! Начиная с Lollipop (21), вы можете использовать атрибуты для ссылки на такие вещи, как цвета, например. ?attr/colorPrimary.

Оригинальный ответ:

Насколько я знаю, вы не можете ссылаться на атрибуты стиля из рисунков, я не смог найти подобное использование в ресурсах платформы Android ($ANDROID_HOME/platforms/android-*/data/res/), все, что я вижу, это то, что каждый рисунок, даже для градиентных рисунков, определяется на месте или они просто ссылаются на другие чертежи как цветные рисунки.

Вот соответствующий отчет об ошибке для этого (пометьте его звездочкой):

https://code.google.com/p/android/issues/detail?id=26251

Вы можете обойти это, используя отдельные чертежи xml, как описано в:

https://stackoverflow.com/a/13471695/172670

person eveliotc    schedule 03.01.2013
comment
К сожалению, он по-прежнему будет падать на чем-либо ниже API 21. (Таким образом, на устройствах с KitKat или ниже он все равно будет падать.) - person Lorne Laliberte; 11.03.2016