Ich habe eine ImageView, für die eine Zeichenressource auf einen Selektor festgelegt ist. Wie greife ich programmgesteuert auf den Selektor zu und ändere die Bilder des hervorgehobenen und nicht hervorgehobenen Zustands?
Hier ist ein Auswahlcode:
<?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>
Ich möchte in der Lage sein, btn_icon_hl
und btn_icon
durch andere Bilder zu ersetzen .
Antworten:
Soweit ich feststellen konnte (ich habe versucht, etwas Ähnliches selbst zu tun), gibt es keine Möglichkeit, einen einzelnen Status zu ändern, nachdem StateListDrawable bereits definiert wurde. Sie können jedoch einen NEUEN durch Code definieren:
Und Sie können einfach zwei davon zur Hand haben oder nach Bedarf ein anderes erstellen.
quelle
Ich hatte das gleiche Problem und ging noch einen Schritt weiter, um es zu lösen. Das einzige Problem ist jedoch, dass Sie NavStateListDrawable nicht in XML angeben können, sodass Sie den Hintergrund Ihres UI-Elements über Code festlegen müssen. Die onStateChange-Methode muss dann überschrieben werden, um sicherzustellen, dass Sie bei jeder Änderung der Ebene des Hauptzeichens auch die Ebene der Liste der untergeordneten Ebenen aktualisieren.
Beim Erstellen des NavStateListDrawable müssen Sie die Ebene des Symbols übergeben, das Sie anzeigen möchten.
Für all die verschiedenen Zeichnungszustände der Navigationsschaltfläche habe ich ungefähr Folgendes.
Ich wollte dies als Frage und Antwort posten, aber da Sie genau diese Frage gestellt haben, können Sie loslegen. Beachten Sie, dass Sie dadurch eine Menge XML-Dateidefinitionen sparen. Ich ging von ungefähr 50-100 XML-Definitionen auf ungefähr 4!.
quelle