Ссылка на цвет в теге <item>, внутри <layer-list> - PullRequest
5 голосов
/ 23 марта 2012

У меня есть вопрос об использовании ссылок в layer-list drawable.

Я хочу использовать пользовательскую кнопку в своем приложении, сделанную из layer-list.

  • Это последний нарисованный btn.xml для кнопки, сделанный из selector:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/btn_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/btn_normal"/>
</selector>
  • Отрисовка в нажатом состоянии btn_pressed выглядит так:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="?custom_color" />
        </shape>
    </item>
    <item android:drawable="@drawable/btn_normal"/>
</layer-list>

Важной частью является линия, где я объявляю цвет ссылкой на custom_color, который я определяю следующим образом.

  • attrs.xml:
<resources>
    <attr name="custom_color" format="reference|color" />
</resources>
  • themes.xml:
<resources>
    <style name="MyTheme" parent="android:Theme.Light.NoTitleBar">
        <item name="custom_color">#ff33b5e5</item>
    </style>
</resources>

Eclipse не выдает никаких ошибок, и компилируется простохорошо.Но когда я запускаю приложение на своем ICS Nexus S или на эмуляторе (независимо от версии), оно вылетает.Logcat указывает следующее:

03-23 ​​14: 33: 38.832: E / AndroidRuntime (636): вызвано: android.content.res.Resources $ NotFoundException: файл res / drawable / btn.xml из ID ресурса для рисования # 0x7f020006

[...]

03-23 ​​14: 33: 38.832: E / AndroidRuntime (636): вызвано: android.content.res.Ресурсы $ NotFoundException: файл res / drawable / btn_pressed.xml из идентификатора нарисованного ресурса # 0x7f020009

Если я закомментирую, элемент shape в layer-list или установим цвет жесткозакодировано, все работает.Так что, похоже, существует проблема со ссылкой на атрибуты в списке слоев.

Итак, кто-нибудь знает решение этой проблемы?Я хочу изменить цвета в этом списке слоев в зависимости от темы, которую использует мое приложение.

Ответы [ 2 ]

1 голос
/ 09 сентября 2014

Хорошо, похоже, что это ошибка, которую не видели до Android L.
Более подробная информация о Android Tracker: Issue 26251

Это должно быть исправлено в Android L, но, по крайней мере, тестирование с Android L Preview в эмуляторе пока не работает полностью. По крайней мере, это не приведет к сбою приложения, но вместо того, чтобы показывать правильный цвет, оно просто дает мне прозрачность (# 00ffffff). Возможно, это не относится к устройствам и / или после выпуска стабильной версии Android L.

0 голосов
/ 09 июля 2014

Попробуйте android:color="@color/custom_color"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...