Подтвердить что ты не робот

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

Я пытаюсь создать пользовательский 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

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

Мой attr.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>

Я не понимаю, почему мой атрибут является ссылкой или цветом, если я "заставляю" цвет в theme.xml, он тоже не работает.

Помогает ли кто-нибудь?

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

4b9b3361

Ответ 1

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

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

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

Ниже приведен соответствующий отчет об ошибке (star it):

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

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

fooobar.com/info/77233/...