Hay algunas maneras de hacer esto:
primer lugar, puede simplemente utilizar un ImageButton
y manualmente cambiar su imagen en dibujable clic en Java. Esto es lo que el stock Music player en Android does for the 'shuffle' button, por ejemplo. Aunque no tendrá control sobre el fondo del botón en estado comprobado, podrá cambiar la imagen, lo que puede ser favorable desde una perspectiva de coherencia de la interfaz de usuario de Android.
Otra opción es utilizar un conjunto complejo de elementos descartables y nueve parches para obtener una imagen dentro de un ToggleButton
, con la opción de cambiar el fondo y/o el recurso de imagen al alternar. Esa es la opción que mostraré a continuación. Pero recuerde, tenga cuidado con la consistencia de UI antes de hacer esto.
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/estirable/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/estirable/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/dibujable/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>
archivos de imagen
btn_default_<state>.9.png
se pueden encontrar en frameworks/base.git bajo core/res/res/drawable-hdpi y core/res/res/drawable-mdpi (también LDPI). ADVERTENCIA: si utiliza esto, su aplicación se verá incoherente en dispositivos con interfaces de usuario del sistema operativo personalizadas (es decir, la interfaz de usuario de Sense de HTC).
ic_mp_shuffle_<state>_btn.9.png
deben tener nueve parches, de modo que la imagen se centre y no se estire para ajustarse al botón. A continuación se presentan ejemplo hdpi
versiones del icono:
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 final: Recuerde que debe ser compatible con la interfaz de usuario del sistema cuando sea posible, y ser conscientes del hecho de que su aplicación puede funcionar en dispositivos con versiones personalizadas del sistema operativo que tienen diferentes gráficos para elementos de IU como botones. Un ejemplo de esto es HTC Sense, que tiene botones verdes en lugar de los grises/naranjas/amarillos en stock de Android. Por lo tanto, si termina copiando los archivos btn_default_...
PNG del repositorio de código abierto para crear un fondo de botón alternar, romperá la coherencia en esos dispositivos.
¿Estás seguro de que no quieres un 'ToggleButton' en lugar de un' ImageButton'? – CommonsWare
El botón de alternar todavía no me deja configurar el botón para que parezca presionado. Tendría que hacer manualmente iconos personalizados para cada botón. Solo quiero que la imagen de fondo sea la que está presionada. – GuyNoir