2010-04-26 5 views
17

Wie kann ich ein Bildbutton im gedrückten Zustand halten, wenn es angeklickt wird? Grundsätzlich möchte ich nur, dass der Hintergrund der depressive Hintergrund ist, aber ich kann nicht herausfinden, wie ich ihn einstellen soll. Im Moment habe ich gerade den Hintergrund der ausgewählten Schaltfläche in meinen Ordner res kopiert, aber wenn ich ihn als Hintergrund einstelle, wird er verschwommen (da das Originalbild größer ist als die Schaltfläche selbst).Android Set ImageButton als Toggle

Normaler Hintergrund: alt text http://img707.imageshack.us/img707/9199/ss20100426163452.png Was ich bekomme: alt text http://img707.imageshack.us/img707/912/ss20100426163357.png alt text http://img3.imageshack.us/img3/8304/ss20100426163623.png

Auch glaube ich nicht, dass ich tatsächlich diese Methode unter Berücksichtigung der vielen verschiedenen UI-Layouts. Die Taste sollte gedrückt bleiben wie auf der Benutzeroberfläche, die der Benutzer verwendet.

+0

Sind Sie sicher, dass Sie keinen 'ToggleButton' anstelle eines' ImageButton' möchten? – CommonsWare

+0

Mit der Umschalttaste konnte ich die Taste nicht gedrückt halten. Ich müsste manuell benutzerdefinierte Symbole für jede Schaltfläche erstellen. Ich möchte nur, dass das Hintergrundbild das gepresste ist. – GuyNoir

Antwort

40

Es gibt ein paar Möglichkeiten, dies zu tun:

Erstens können Sie einfach eine ImageButton verwenden und manuell sein Image ziehbar auf Klick in Java schalten. Dies ist, was die stock Music player auf Android does for the 'shuffle' button, zum Beispiel. Obwohl Sie im aktivierten Zustand des Schaltflächenhintergrunds keine Kontrolle über den Hintergrund der Schaltfläche haben, können Sie das Bild austauschen, was aus Sicht der Konsistenz der Android-Benutzeroberfläche von Vorteil sein kann.

Eine andere Option ist die Verwendung eines komplexen Satzes von Zeichen- und Neun-Patches, um ein Bild innerhalb eines ToggleButton zu erhalten, mit der Option, den Hintergrund und/oder die Bildressource beim Umschalten zu ändern. Das ist die Option, die ich unten zeigen werde. Aber denken Sie daran, seien Sie vorsichtig bei der UI-Konsistenz, bevor Sie dies tun.


res/layout/foo.xml

... 
<ToggleButton 
    android:textOn="" android:textOff="" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/shuffle_button" /> 
... 

res/ziehbare/shuffle_button.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- use "@android:drawable/btn_default" to keep consistent with system --> 
    <item android:drawable="@drawable/toggle_button_background" /> 
    <item android:drawable="@drawable/shuffle_button_image" /> 
</layer-list> 

res/ziehbare/toggle_button_background.xml

res/ziehbar/shuffle_button_image.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/ic_mp_shuffle_on_btn" android:state_checked="true" /> 
    <item android:drawable="@drawable/ic_mp_shuffle_off_btn" /> 
</selector> 

Bilddateien

  • btn_default_<state>.9.png kann in frameworks/base.git unter core/res/res/drawable-hdpi und core/res/res/drawable-mdpi (auch LDPI) gefunden werden. WARNUNG: Wenn Sie diese verwenden, wird Ihre App auf Geräten mit angepassten Betriebssystem-UIs (d. H. HTC Sense UI) inkonsistent aussehen.
  • ic_mp_shuffle_<state>_btn.9.png müssen neun-Patches sein, so dass das Bild zentriert und nicht gedehnt wird, um die Schaltfläche anzupassen. Dies sind beispielsweise hdpi Versionen des Symbols:

res/drawable- (h | m | LDPI)/ic_mp_shuffle_ (on | off) _btn.9.png

ic_mp_shuffle_on_btn.9.png http://nikonizer.yfrog.com/Himg404/scaled.php?tn=0&server=404&filename=icmpshuffleonbtn9.png&xsize=640&ysize=640ic_mp_shuffle_off_btn.9.png http://nikonizer.yfrog.com/Himg708/scaled.php?tn=0&server=708&filename=icmpshuffleoffbtn9.png&xsize=640&ysize=640


Abschließender Hinweis: Erinnern Sie sich mit dem System UI konsistent zu sein, wenn möglich, und darauf achten, dass Ihre App auf Geräten mit angepassten Versionen des Betriebssystems ausgeführt werden kann Diese haben unterschiedliche Grafiken für UI-Elemente wie Buttons. Ein Beispiel dafür ist HTC Sense, die grüne Tasten anstelle der grau/orange/gelben auf Lager Android hat. Wenn Sie also die btn_default_... PNG-Dateien aus dem Open-Source-Repository kopieren, um einen umschaltbaren Schaltflächenhintergrund zu erstellen, werden Sie die Konsistenz auf diesen Geräten beeinträchtigen.

+0

Ich nehme an, es gibt keine Möglichkeit, direkt vom Betriebssystem auf die Ressourcen zuzugreifen, so dass es jedes Mal den richtigen Hintergrund erhält. – GuyNoir

+0

Nein, weil '@android: drawable/btn_default_normal' und ähnliche (die neun Patches) nicht öffentlich sind, aber' @android: drawable/btn_default' (der Selektor) ist öffentlich. Leider enthält der Selektor keinen aktivierten Status. –

+0

Bah. Alles klar, danke für die Info. – GuyNoir