Измените текст включения / выключения переключателя Android

Ответы:

202

Вы можете использовать следующее, чтобы установить текст из кода:

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.

Чтобы установить текст с помощью xml, используйте следующее:

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

Эта информация отсюда

rfsk2010
источник
4
однако он не работает на телефонах ei samsung и htc
Serafins
2
Серафинс, это неправильно. Он работает на телефонах Samsung и HTC.
прерывание
4
При программном обновлении включенного и выключенного текста кнопка не перерисовывается с новым текстом. Вы можете принудительно выполнить перерисовку, вызвав setChecked (toggleButton.isChecked). Звучит смешно, но это хитрость для принудительной перерисовки. См. Этот ответ stackoverflow .
MidasLefko
Похоже, вам больше не нужен toggleButton.setTextOff (textOff); и toggleButton.setTextOn (textOn) ;. Текст для каждого включенного состояния будет изменяться путем простого включения соответствующих характеристик xml.
Мартин Эрлик,
1
Да, он не работает с android.support.v7.widget.SwitchCompatнекоторыми OEM-производителями, которые я проверял!
sud007
16

В примере, на который вы ссылаетесь, они меняют его на День / Ночь, используя android:textOnиandroid:textOff

Марк Б
источник
На самом деле я связался с другим вопросом, которого никогда раньше не видел. Спасибо, что указали ответ в моем собственном вопросе.
styler1972
12

Установите XML как:

<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" />
Тьяго
источник
3

В некоторых случаях вам нужно принудительно обновить представление, чтобы оно работало.

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

toggleButton.setTextOn(textOn);
toggleButton.requestLayout();
Саураб Падвекар
источник
requestLayout()не работает, но setChecked()работает.
Irfan Latif
2

Похоже, вам больше не нужен toggleButton.setTextOff (textOff); и toggleButton.setTextOn (textOn) ;. Текст для каждого включенного состояния будет изменяться путем простого включения соответствующих характеристик xml. Это заменит текст включения / выключения по умолчанию.

<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"/>
Мартин Эрлик
источник
2

Сделать это можно двумя способами:

Вариант 1. Установив его атрибуты xml

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

Вариант 2: программно

Установите атрибут onClick: methodNameHere (мой - toggleState). Затем напишите этот код:

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

PS: это работает для меня, надеюсь, это сработает и для вас

Feps
источник