Android: crea un botón de alternar con imagen y sin texto

¿Es posible crear un botón para alternar en Android que tenga una imagen pero no texto? Idealmente se vería así:

Alternar el botón con la imagen

He visto publicaciones similares donde la respuesta fue cambiar el fondo, pero quiero preservar el diseño de Holo Light y simplemente cambiar el texto con una imagen.

Necesito poder cambiar programáticamente la fuente de la imagen,

¿Alguna idea de cómo podría hacer esto?

Si esto no se puede hacer, ¿hay alguna manera de activar y desactivar un botón normal?

  1. ¿Puedo reemplazar el texto de alternar con una imagen?

    No, no podemos, aunque podemos ocultar el texto sobrescribiendo el estilo predeterminado del botón de alternar, pero eso no nos dará un botón para alternar, ya que no podemos reemplazar el texto con una imagen.

  2. ¿Cómo puedo hacer un botón de alternar normal?

    Crea un archivo ic_toggle en tu carpeta res/drawable

         

    Aquí @drawable/ic_slide_switch_on y @drawable/ic_slide_switch_off son imágenes que creas.

    A continuación, cree otro archivo en la misma carpeta, asígnele el nombre ic_toggle_bg

          

    Ahora agregue a su tema personalizado, (si no tiene uno, cree un archivo de styles.xml en su carpeta res/values/ )

       

    Esto crea un botón de alternar personalizado para usted.

  3. Cómo usarlo

    Use el estilo personalizado y el fondo en su vista.

       

ToggleButton hereda de TextView para que pueda configurar los TextView para que se muestren en los 4 bordes del texto. Puede usar eso para mostrar el icono que desea sobre el texto y esconder el texto real

  

El resultado en comparación con ToggleButton regular parece

enter image description here

La opción de segundos es usar un ImageSpan para reemplazar el texto con una imagen. Se ve un poco mejor, ya que el icono está en la posición correcta, pero no se puede hacer directamente con el diseño xml.

Usted crea un ToggleButton simple

  

Luego configure el “texto” programmatialmente

 ToggleButton button = (ToggleButton) findViewById(R.id.toggleButton3); ImageSpan imageSpan = new ImageSpan(this, android.R.drawable.ic_menu_info_details); SpannableString content = new SpannableString("X"); content.setSpan(imageSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); button.setText(content); button.setTextOn(content); button.setTextOff(content); 

El resultado aquí en el medio – icono se coloca ligeramente más bajo ya que ocupa el lugar del texto.

enter image description here

crear toggle_selector.xml en res / dibujable

      

aplicar el selector a su botón de alternar

  

Nota: para eliminar el texto que utilicé siguiendo el código anterior

 textOff="" textOn="" 

Sé que esto es un poco tarde, sin embargo, para cualquier persona interesada, he creado un componente personalizado que básicamente es un botón de imagen de alternar, el dibujable puede tener estados y el fondo

https://gist.github.com/akshaydashrath/9662072