Ändern Sie den Ein / Aus-Text einer Umschalttaste für Android

Antworten:

202

Sie können Folgendes verwenden, um den Text aus dem Code festzulegen:

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.

Verwenden Sie Folgendes, um den Text mithilfe von XML festzulegen:

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

Diese Informationen stammen von hier

rfsk2010
quelle
4
es funktioniert jedoch nicht auf ei samsung und htc handys
Serafins
2
Serafins, das stimmt nicht. Es funktioniert auf Samsung- und HTC-Handys.
unterbrechen
4
Wenn Sie den Ein- und Ausschalttext programmgesteuert aktualisieren, zeichnet sich die Schaltfläche nicht mit dem neuen Text neu. Sie können ein Neuzeichnen erzwingen, indem Sie setChecked (toggleButton.isChecked) aufrufen. Klingt lächerlich, ist aber ein Hack, um das Neuzeichnen zu erzwingen. Siehe diese Antwort zum Stapelüberlauf .
MidasLefko
Es scheint, dass Sie toggleButton.setTextOff (textOff) nicht mehr benötigen. und toggleButton.setTextOn (textOn);. Der Text für jeden umgeschalteten Status ändert sich, indem lediglich die relevanten XML-Merkmale einbezogen werden.
Martin Erlic
1
Ja, bei android.support.v7.widget.SwitchCompateinigen OEMs funktioniert das nicht. Ich habe das überprüft!
Sud007
16

In dem Beispiel, auf das Sie verlinken, ändern sie es mit android:textOnund in Tag / Nachtandroid:textOff

Mark B.
quelle
Ich habe tatsächlich eine andere Frage verlinkt, die ich noch nie gesehen hatte. Vielen Dank für den Hinweis auf die Antwort in meiner eigenen Frage.
styler1972
11

Stellen Sie das XML wie folgt ein:

<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
quelle
2

Es scheint, dass Sie toggleButton.setTextOff (textOff) nicht mehr benötigen. und toggleButton.setTextOn (textOn);. Der Text für jeden umgeschalteten Status ändert sich, indem lediglich die relevanten XML-Merkmale einbezogen werden. Dadurch wird der Standard-EIN / AUS-Text überschrieben.

<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"/>
Martin Erlic
quelle
2

Sie können dies mit 2 Optionen tun:

Option 1: Durch Festlegen der XML-Attribute

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

Option 2: Programmatisch

Setzen Sie das Attribut onClick: methodNameHere (meins ist toggleState) Dann schreiben Sie diesen Code:

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

PS: Es funktioniert bei mir, hoffe es funktioniert auch bei Ihnen

Feps
quelle
2

In einigen Fällen müssen Sie die Aktualisierung der Ansicht erzwingen, damit sie funktioniert.

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

toggleButton.setTextOn(textOn);
toggleButton.requestLayout();
Saurabh Padwekar
quelle
requestLayout()funktioniert nicht aber setChecked()tut.
Irfan Latif