更改 Android 切换按钮的开/关文本

我只是 改变了 ToggleButton的背景,现在我正在寻找改变的开/关文本随之而来。最简单的方法是什么?

115022 次浏览

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

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

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" />

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"/>

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

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();