Estoy intentando anular la ToggleButton
apariencia predeterminada . Aquí está el XML que define 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 iconos de 30 x 30 que queremos usar para los estados en los que se hizo clic o no. Ahora mismo tenemos un código que cambia programáticamente el icono de fondo según el 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, estoy buscando una mejor manera de hacer esto. Intenté hacer un selector para la imagen de fondo, que cambiaría 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; leyendo la ToggleButton
API ( http://developer.android.com/reference/android/widget/ToggleButton.html ), parece que los únicos atributos xml heredados son
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 haber el atributo android: state_checked, a pesar de que la clase tiene el método isChecked()
y setChecked()
.
Entonces, ¿hay alguna manera de hacer lo que quiero en XML, o estoy atascado con mi solución desordenada?
fuente
CompoundButton
.CompoundButton
es abstracto!Respuestas:
Tu código está bien. Sin embargo, el botón de alternancia mostrará el primer elemento de su selector que coincida, por lo que el valor predeterminado debería ser el último. Organice los elementos de la siguiente manera para asegurarse de que se utilizarán todos:
fuente
switch
siempre seleccionaría el "correcto" independientemente del orden, esto se comporta más como un largoif-elseif-elseif-else
con condiciones comostate_x == true && state_y == false && state_z = true
.