У меня есть элемент selector
в моем приложении, который используется в качестве цвета фона строки списка. Дело в том, что строка меняет цвет при нажатии/прикосновении.Тема для селектора, который можно использовать на pre-Lollipop
Поэтому селектор использует две протяжки, одну для прессованного состояния и одну регулярную. Файл: rowbgselector.xml
в папке res/color
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/rowbg_shape_selected" android:state_pressed="true"/>
<item android:drawable="@drawable/rowbg_shape" />
</selector>
Эти два вводимого коэффициента ссылочных определены в res/drawable
в виде простых форм прямоугольник с цветом:
Файл rowbg_shape.xml
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@color/row_bg"/>
</shape>
Файл rowbg_shape_selected.xml
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="?attr/colorAccent"/>
</shape>
Это работает на Lollipop устройствах, но не на что-либо заранее леденец с ошибкой, которая не говорит много: Caused by: android.content.res.Resources$NotFoundException: File res/drawable/rowbg_shape_selected.xml from drawable resource ID #0x7f02006c
Я считаю, что вопрос заключается в том, что это ошибка, которая была исправлена в леденец, смотрите здесь: https://code.google.com/p/android/issues/detail?id=26251
Проблема в том, что я пытаюсь ссылаться на attr/colorAccent
, что, конечно, определено в моих темах. У меня есть несколько тем с разными цветами, которые пользователь может выбрать, и attr/colorAccent
отличается во всех из них. Однако, похоже, из-за этой ошибки на pre-Lollipop вы не можете ссылаться на такой атрибут в селекторе ...
Каковы мои альтернативные варианты? Единственный вариант, о котором я могу думать, это создать отдельный XML-файл выбора для каждой темы и добавить что-то вроде attr/bg_selector
, которое затем ссылается на правильный файл селектора для каждой темы. Это займет много времени, и в дальнейшем это будет тонкой работой, чтобы изменить что-либо для этого селектора (что, если я хочу сделать цвет немного темнее или светлее позже, мне придется пройти через все эти файлы ...).
Нет ли другого варианта?
Я сделал что-то подобное здесь. вероятно, это может вам помочь: http://stackoverflow.com/questions/24717352/selector-layer-list-and-shape-bitmap-in-the-same-xml – gian1200
Я не уверен, что это важно, все ваши цвета и т.д. являются статическими. Я хочу ссылаться на атрибут, чтобы изменить его значение в моей (многие) темы, но это невозможно в селекторе (по крайней мере, до Lollipop). –
Почему вы используете '? Attr/colorAccent', вместо этого что-то вроде« @ color/... »? – gian1200