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

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

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

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

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

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

1 Ответ

12 голосов
/ 04 января 2013

Хорошие новости всем!Начиная 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

...