100 votos

Android: Especificar dos imágenes diferentes para togglebutton utilizando XML

Estoy tratando de reemplazar el valor predeterminado ToggleButton apariencia. Aquí está el código XML que define el ToggleButton:

<ToggleButton android:id="@+id/FollowAndCenterButton"
        android:layout_width="30px"
        android:layout_height="30px"
        android:textOn="" android:textOff="" android:layout_alignParentLeft="true"
        android:layout_marginLeft="5px"
        android:layout_marginTop="5px" android:background="@drawable/locate_me"/>

Ahora, tenemos dos de 30 x 30 de iconos que desea usar para el pinchado/no-al hacer clic en los estados. Ahora que tenemos el código de programa que cambia el icono de fondo, dependiendo del estado:

centeredOnLocation.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            if (centeredOnLocation.isChecked()) {
                centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me_on));
            } else {
                centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me));
            }
        }
});

Obviamente, yo estoy buscando una manera mejor de hacer esto. He intentado hacer una selección de la imagen de fondo, que haría cambiar automáticamente entre los estados:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:drawable="@drawable/locate_me" /> <!-- default -->
 <item android:state_checked="true"
       android:drawable="@drawable/locate_me_on" /> <!-- pressed -->
 <item android:state_checked="false"
       android:drawable="@drawable/locate_me" /> <!-- unchecked -->



Pero esto no funciona; la lectura de la ToggleButton de la API (http://developer.android.com/reference/android/widget/ToggleButton.html), parece que el único heredado atributos xml se

    XML Attributes
Attribute Name  Related Method  Description
android:disabledAlpha       The alpha to apply to the indicator when disabled. 
android:textOff         The text for the button when it is not checked. 
android:textOn      The text for the button when it is checked. 

No parece ser el de android:state_checked atributo, a pesar de la clase con el método isChecked() y setChecked().

Así que, ¿hay una manera de hacer lo que quiero en XML, o estoy atascado con mi desordenado solución?

159voto

Vitaly Polonetsky Puntos 5264

El código está bien. Sin embargo, el botón de alternar mostrará el primer elemento en el selector que coincide, el valor por defecto debe venir pasado. Organizar los elementos de la siguiente manera para asegurarse de que todos serán utilizados:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:state_pressed="true" /> //currently pressed turning the toggle on
    <item android:state_pressed="true" /> //currently pressed turning the toggle off
    <item android:state_checked="true" /> //not pressed default checked state
    <item /> //default non-pressed non-checked
</selector>

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X