Ci sono alcuni modi per farlo:
In primo luogo, si può semplicemente utilizzare un ImageButton
e manualmente alternare la sua drawable immagine sullo scatto in Java. Questo è ciò che il stock Music player su Android does for the 'shuffle' button, per esempio. Anche se non avrai il controllo sullo sfondo del pulsante nel suo stato controllato, sarai in grado di scambiare l'immagine, che potrebbe essere favorevole da una prospettiva di coerenza dell'interfaccia utente Android.
Un'altra opzione consiste nell'utilizzare un set complesso di drawable e nove patch per ottenere un'immagine all'interno di uno ToggleButton
, con l'opzione di modificare lo sfondo e/o la risorsa immagine al passaggio. Questa è l'opzione che mostrerò qui sotto. Ma ricorda, fai attenzione alla coerenza dell'interfaccia utente prima di farlo.
res/layout/foo.xml
...
<ToggleButton
android:textOn="" android:textOff=""
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shuffle_button" />
...
ris/drawable/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>
ris/drawable/toggle_button_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- checked state -->
<item android:state_pressed="false" android:state_checked="true"
android:drawable="@drawable/btn_default_checked" />
<item android:state_window_focused="false" android:state_enabled="true"
android:drawable="@drawable/btn_default_normal" />
<item android:state_window_focused="false" android:state_enabled="false"
android:drawable="@drawable/btn_default_normal_disable" />
<item android:state_pressed="true"
android:drawable="@drawable/btn_default_pressed" />
<item android:state_focused="true" android:state_enabled="true"
android:drawable="@drawable/btn_default_selected" />
<item android:state_enabled="true"
android:drawable="@drawable/btn_default_normal" />
<item android:state_focused="true"
android:drawable="@drawable/btn_default_normal_disable_focused" />
<item android:drawable="@drawable/btn_default_normal_disable" />
</selector>
res/drawable/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>
file immagine
btn_default_<state>.9.png
possono essere trovati in frameworks/base.git sotto core/res/res/drawable-hdpi e core/res/res/drawable-mdpi (anche ldpi). AVVISO: se si utilizzano questi dati, l'app apparirà incoerente sui dispositivi con interfaccia utente del sistema operativo personalizzata (ad esempio l'interfaccia utente di Sense di HTC).
ic_mp_shuffle_<state>_btn.9.png
devono essere nove patch, in modo che l'immagine sia centrata e non allungata per adattarsi al pulsante. Qui di seguito sono esempio hdpi
versioni dell'icona:
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
nota finale: Ricorda di essere coerente con l'interfaccia utente del sistema, quando possibile, ed essere consapevole del fatto che la vostra applicazione può funzionare su dispositivi con versioni personalizzate del sistema operativo che hanno una grafica diversa per elementi dell'interfaccia utente come i pulsanti. Un esempio di questo è HTC Sense, che ha pulsanti verdi al posto di quelli grigi/arancioni/gialli in stock Android. Pertanto, se si finisce di copiare i file PNG btn_default_...
dal repository open source per creare uno sfondo pulsante commutabile, si interromperà la coerenza su tali dispositivi.
Sei sicuro di non volere un 'ToggleButton' invece di un' ImageButton'? – CommonsWare
Il pulsante di attivazione continua a non consentirmi di impostare il pulsante in modo che appaia premuto. Dovrei creare manualmente icone personalizzate per ogni pulsante. Voglio solo che l'immagine di sfondo sia quella pressata. – GuyNoir