Change the On/Off text of a toggle button Android
Asked Answered
E

6

88

I just changed the background of a ToggleButton, and now I'm looking to change the ON/OFF text that comes up with it. What is the easiest way to do this?

Ecliptic answered 29/12, 2011 at 20:56 Comment(0)
E
215

You can use the following to set the text from the code:

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.

To set the text using xml, use the following:

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

This information is from here

Emilioemily answered 29/12, 2011 at 21:1 Comment(7)
however it doesn't work on e.i. samsung and htc phonesIridescence
Serafins, that's not right. It does work on Samsung and HTC phones.Donalddonaldson
When updating the on and off text programatically the button doesn't redraw itself with the new text. You can force a redraw by calling setChecked(toggleButton.isChecked). Sounds ridiculous but its a hack to force redrawing. See this stackoverflow answer.Flyer
It appears you no longer need toggleButton.setTextOff(textOff); and toggleButton.setTextOn(textOn);. The text for each toggled state will change by merely including the relevant xml characteristics.Squeegee
Yes it doesn't work with android.support.v7.widget.SwitchCompat on some OEMs I have checked that!Large
You've call toggleButton.setSelected(<false/true>) after setting the ON/OFF text from code to force invalidate the button.Franz
Nothing of the mentioned works for Nexus for either Switch and SwitchCompat. Only set in xml or use custom drawableChristean
P
16

In the example you link to, they are changing it to Day/Night by using android:textOn and android:textOff

Pelagi answered 29/12, 2011 at 21:2 Comment(1)
I actually linked to a different question I had never seen before. Thanks for pointing out the answer in my own question.Ecliptic
H
13

Set the XML as:

<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" />
Holds answered 20/12, 2014 at 9:18 Comment(0)
P
3

In some cases, you need to force refresh the view in order to make it work.

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

toggleButton.setTextOn(textOn);
toggleButton.requestLayout();
Problematic answered 10/4, 2019 at 6:44 Comment(1)
requestLayout() doesn't work but setChecked() does.Hauberk
S
2

It appears you no longer need toggleButton.setTextOff(textOff); and toggleButton.setTextOn(textOn);. The text for each toggled state will change by merely including the relevant xml characteristics. This will override the default ON/OFF text.

<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"/>
Squeegee answered 9/12, 2015 at 6:57 Comment(0)
C
2

You can do this by 2 options:

Option 1: By setting its xml attributes

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

Option 2: Programmatically

Set the attribute onClick: methodNameHere (mine is toggleState) Then write this 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: it works for me, hope it works for you too

Cane answered 20/1, 2019 at 17:53 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.