Cambiar el texto de encendido / apagado de un botón de alternancia Android

Respuestas:

202

Puede usar lo siguiente para configurar el texto del código:

toggleButton.setText(textOff);
// Sets the text for when the button is first created.

toggleButton.setTextOff(textOff);
// Sets the text for when the button is not in the checked state.

toggleButton.setTextOn(textOn);
// Sets the text for when the button is in the checked state.

Para configurar el texto usando xml, use lo siguiente:

android:textOff="The text for the button when it is not checked."
android:textOn="The text for the button when it is checked." 

Esta información es de aquí

rfsk2010
fuente
4
sin embargo, no funciona en teléfonos ei samsung y htc
Serafins
2
Serafins, eso no está bien. Funciona en teléfonos Samsung y HTC.
interrumpir el
4
Al actualizar el texto de activación y desactivación mediante programación, el botón no se vuelve a dibujar con el nuevo texto. Puede forzar un nuevo dibujo llamando a setChecked (toggleButton.isChecked). Suena ridículo, pero es un truco forzar el rediseño. Vea esta respuesta de stackoverflow .
MidasLefko
Parece que ya no necesita toggleButton.setTextOff (textOff); y toggleButton.setTextOn (textOn) ;. El texto de cada estado alternado cambiará simplemente incluyendo las características xml relevantes.
Martin Erlic
1
Sí, no funciona con android.support.v7.widget.SwitchCompatalgunos OEM. ¡Lo he comprobado!
sud007
16

En el ejemplo al que enlaza, lo están cambiando a Día / Noche usando android:textOnyandroid:textOff

Marca B
fuente
De hecho, lo vinculé a una pregunta diferente que nunca había visto antes. Gracias por señalar la respuesta en mi propia pregunta.
styler1972
11

Establezca el XML como:

<ToggleButton
    android:id="@+id/flashlightButton"
    style="@style/Button"
    android:layout_above="@+id/buttonStrobeLight"
    android:layout_marginBottom="20dp"
    android:onClick="onToggleClicked"
    android:text="ToggleButton"
    android:textOn="Light ON"
    android:textOff="Light OFF" />
Thiago
fuente
2

Parece que ya no necesita toggleButton.setTextOff (textOff); y toggleButton.setTextOn (textOn) ;. El texto de cada estado alternado cambiará simplemente incluyendo las características xml relevantes. Esto anulará el texto de ENCENDIDO / APAGADO predeterminado.

<ToggleButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/toggleText"
    android:textOff="ADD TEXT"
    android:textOn="CLOSE TEXT"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="10dp"
    android:visibility="gone"/>
Martín Erlic
fuente
2

Puede hacer esto con 2 opciones:

Opción 1: configurando sus atributos xml

 `android:textOff="TEXT OFF"
  android:textOn="TEXT ON"`

Opción 2: programáticamente

Establezca el atributo onClick: methodNameHere (el mío es toggleState) Luego escriba este código:

public void toggleState(View view) {
   boolean toggle = ((ToogleButton)view).isChecked();
   if (toggle){
       ((ToogleButton)view).setTextOn("TEXT ON");
   } else {
      ((ToogleButton)view).setTextOff("TEXT OFF");
   }
}

PD: funciona para mí, espero que también funcione para ti

Feps
fuente
2

En algunos casos, debe forzar la actualización de la vista para que funcione.

toggleButton.setTextOff(textOff);
toggleButton.requestLayout();

toggleButton.setTextOn(textOn);
toggleButton.requestLayout();
Saurabh Padwekar
fuente
requestLayout()no funciona pero lo setChecked()hace.
Irfan Latif