Я пытаюсь изменить цвет фона TextView
виджета Android, когда пользователь прикасается к нему. Для этой цели я создал селектор, который хранится res/color/selector.xml
примерно так:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:color="@color/semitransparent_white"
/>
<item
android:color="@color/transparent"
/>
</selector>
clickable
Атрибут TextView
является true
, в том случае, представляющие интерес.
Когда я назначаю этот селектор TextView
as android:background="@color/selector"
, во время выполнения я получаю следующее исключение:
ОШИБКА / AndroidRuntime (13130): вызвано: org.xmlpull.v1.XmlPullParserException: строка двоичного файла XML № 6: тег требует атрибута 'drawable' или дочернего тега, определяющего возможность рисования
Когда я меняю атрибут на drawable, он работает, но результат выглядит совершенно неверным, потому что идентификаторы интерпретируются как ссылки на изображения, а не как ссылки на цвета (как предполагает «drawable»).
Что меня смущает, так это то, что я могу установить ссылку на цвет, например "@ color / black", как атрибут фона напрямую. Это работает, как ожидалось. Использование селекторов не работает.
Я также могу textColor
без проблем использовать селектор .
Как правильно применить селектор фонового цвета к TextView
в Android?
Ответы:
Проблема здесь в том, что вы не можете определить цвет фона с помощью селектора цвета, вам нужен селектор с возможностью рисования . Итак, необходимые изменения будут выглядеть так:
Вам также необходимо переместить этот ресурс в
drawable
каталог, где он будет иметь больше смысла, поскольку сам по себе не является селектором цвета.Тогда вам нужно будет создать такой
res/drawable/selected_state.xml
файл:и, наконец, вы бы использовали его так:
Примечание : причина, по которой OP рисовал ресурс изображения, вероятно, связана с тем, что он пытался просто сослаться на свой ресурс, который все еще находился в каталоге цветов, но использовал,
@drawable
поэтому он столкнулся с конфликтом идентификаторов, выбрав неправильный ресурс.Надеюсь, это все еще может помочь кому-то, даже если OP, я надеюсь, решил свою проблему к настоящему времени.
источник
Решение Бенуа работает, но вам действительно не нужно нести накладные расходы, чтобы нарисовать форму. Поскольку цвета можно рисовать, просто определите цвет в файле /res/values/colors.xml:
А затем используйте как таковой в своем селекторе:
источник
Еще более простое решение вышеуказанного:
Сохраните это в папке с возможностью рисования, и все готово.
источник
<item android:state_pressed="true" android:color="@color/vantablack"/>
семантически идентично<item android:state_pressed="true"><color android:color="@color/vantablack"/></item>
Даже это работает.
Я добавил
android:drawable
атрибут к каждому элементу, и их значения - цвета.Кстати, а почему говорят, что
color
это один из атрибутовselector
? Они не пишут, чтоandroid:drawable
требуется.Ресурс списка состояний цвета
источник
Для тех, кто хочет сделать это без создания фонового сектора, просто добавьте эти строки в
TextView
Также, чтобы сделать его выбираемым, используйте:
источник