Eu tenho um ImageView que tem um recurso de imagem drawable definido como um seletor. Como faço para acessar programaticamente o seletor e alterar as imagens do estado realçado e não realçado?
Aqui está um código de seletor:
<?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>
Eu quero ser capaz de substituir btn_icon_hl
e btn_icon
com outras imagens.
Respostas:
Até onde pude descobrir (eu tentei fazer algo semelhante), não há como modificar um único estado depois que o StateListDrawable já foi definido. Você pode, no entanto, definir um NOVO por meio do código:
E você pode apenas manter dois deles em mãos ou criar um diferente conforme necessário.
fonte
Eu tive o mesmo problema e dei um passo adiante para resolvê-lo. O único problema, entretanto, é que você não pode especificar o NavStateListDrawable em xml, então você deve definir o plano de fundo do seu elemento de IU por meio do código. O método onStateChange deve então ser substituído para garantir que toda vez que o nível do drawable principal for alterado, você também atualize o nível da lista de níveis filho.
Ao construir o NavStateListDrawable, você deve passar o nível do ícone que deseja exibir.
Para todos os diferentes estados de drawable do botão de navegação, tenho algo como o seguinte.
Eu ia postar isso como uma pergunta e resposta, mas visto que você fez a própria pergunta, aqui está. Observe, isso economiza um monte de definições de arquivo xml. Eu diminuí de cerca de 50-100 definições de xml para cerca de 4 !.
fonte