2011-01-14 11 views
0

Ich verwende ImageViews für meine Tab-Indikatoren in einer TabActivity. Ich habe zwei Kopien der gleichen JPEG-Datei, eine auf 75% des Originals skaliert. Was ich tun möchte, ist die normale Größe für ausgewählte und die kleinere für unselected.Behandeln ausgewählter/nicht ausgewählter Status mit ImageView als Tab-Indikatoren

StateListDrawable funktioniert nicht mit ImageView, also denke ich, dass ich selbst damit umgehen muss. Alles, was ich finden kann, scheint sich auf die Änderung der Tab-Auswahl zu beziehen, ist TabHost.onTabChanged(String tabId) - ich nehme an, dass tabId der String ist, den ich an new TabSpec(...) übergeben habe.

Ist dies die einzige Möglichkeit, Registerkartenänderungen zu verfolgen? Es wäre nützlich, einen Event-Handler (oder Handler) zu haben, um es der zuvor ausgewählten Registerkarte zu erlauben, den Ansichtszustand zu ändern, und dann die neue Registerkarte, um dasselbe zu tun. Ich kann eine Variable wie int currentSelection beibehalten, aber es wäre nützlich, wenn es ein bisschen mehr automatisiert sein könnte.

+0

"StateListDrawable funktioniert nicht mit ImageView" - sicher ist es. – CommonsWare

+0

@CommonsWare: Ich erhalte eine ClassCastException, wenn ich versuche, ImageViews setImageDrawable() zu verwenden, wenn ich eine XML-Datei verwende, die den 'Selektor' für eine StateListDrawable definiert. Ich bin mit diesem im Kreis herumgelaufen und konnte es nicht lösen. Irgendwelche Links zu Beispielcode, auf die Sie mich verweisen können? – Squonk

+2

Verwenden Sie 'setImageResource()', nicht 'setImageDrawable()'. – CommonsWare

Antwort

1

Lösung: Mein idealer Ansatz war StateListDrawables mit meinem ImageViews zu verwenden, aber ich war ein Classcast bekommen, wenn ImageView.setImageDrawable zu verwenden versuchen() mit XML-Dateien die Zustands Bilder definieren.

Die Antwort ist, stattdessen setImageResource() zu verwenden, es funktioniert perfekt für das, was ich brauche. Danke an CommonsWare dafür, dass er mich in die richtige Richtung weist.