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?
6 Answers
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
7 Comments
android.support.v7.widget.SwitchCompat on some OEMs I have checked that!In the example you link to, they are changing it to Day/Night by using android:textOn and android:textOff
1 Comment
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
Comments
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(); 1 Comment
requestLayout() doesn't work but setChecked() does.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"/>