J'ai un ImageView qui a une ressource d'image dessinable définie sur un sélecteur. Comment puis-je accéder par programme au sélecteur et modifier les images de l'état en surbrillance et non en surbrillance?
Voici un code de sélecteur:
<?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>
Je veux pouvoir remplacer btn_icon_hl
et btn_icon
avec d'autres images.
Réponses:
Autant que j'ai pu trouver (j'ai essayé de faire quelque chose de similaire moi-même), il n'y a aucun moyen de modifier un seul état après que StateListDrawable a déjà été défini. Vous pouvez cependant en définir un NOUVEAU via le code:
Et vous pouvez simplement en garder deux sous la main ou en créer un différent selon vos besoins.
la source
J'ai eu le même problème et je suis allé plus loin pour le résoudre. Le seul problème cependant est que vous ne pouvez pas spécifier le NavStateListDrawable dans xml, vous devez donc définir l'arrière-plan de votre élément d'interface utilisateur via le code. La méthode onStateChange doit ensuite être remplacée pour garantir que chaque fois que le niveau du dessin principal est modifié, vous mettez également à jour le niveau de la liste des niveaux enfants.
Lors de la construction du NavStateListDrawable, vous devez passer le niveau de l'icône que vous souhaitez afficher.
Pour tous les différents états dessinables du bouton de navigation, j'ai quelque chose comme ce qui suit.
J'allais poster ceci sous forme de question et réponse, mais vu que vous avez posé la question même, c'est parti. Notez que cela vous permet d'économiser beaucoup de définitions de fichiers xml. je suis passé d'environ 50-100 définitions xml à environ 4 !.
la source