У меня есть ImageView, у которого есть ресурс рисованного изображения, установленный для селектора. Как программно получить доступ к селектору и изменить изображения выделенного и невыделенного состояния?
Вот код селектора:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/iconSelector">
<!-- pressed -->
<item android:state_pressed="true" android:drawable="@drawable/btn_icon_hl" />
<!-- focused -->
<item android:state_focused="true" android:drawable="@drawable/btn_icon_hl" />
<!-- default -->
<item android:drawable="@drawable/btn_icon" />
</selector>
Я хочу иметь возможность заменять btn_icon_hl
и btn_icon
другие изображения.
Ответы:
Насколько мне удалось найти (я сам пробовал сделать что-то подобное), нет возможности изменить одно состояние после того, как StateListDrawable уже был определен. Однако вы можете определить НОВЫЙ с помощью кода:
И вы можете просто держать два из них под рукой или создать другой, если вам это нужно.
источник
У меня была та же проблема, и я пошел дальше, чтобы ее решить. Однако единственная проблема заключается в том, что вы не можете указать NavStateListDrawable в xml, поэтому вам нужно установить фон своего элемента пользовательского интерфейса с помощью кода. Затем необходимо переопределить метод onStateChange, чтобы каждый раз при изменении уровня основного элемента рисования вы также обновляли уровень списка дочерних уровней.
При создании NavStateListDrawable вы должны передать уровень значка, который хотите отобразить.
Для всех доступных состояний кнопки навигации у меня есть что-то вроде следующего.
Я собирался опубликовать это как вопрос и ответ, но, увидев, как вы задали сам вопрос, готово. Обратите внимание, это избавит вас от кучи определений файлов xml. я снизился с 50-100 определений xml до 4 !.
источник