Android Переключатель виджетов textOn и textOff не работает в Lollipop

Поведение виджета переключателя изменилось в Lollipop (5.0).

    <Switch
        android:id="@+id/switcher"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_marginBottom="16dp"
        android:layout_marginRight="8dp"
        android:layout_marginEnd="8dp"
        android:layout_toEndOf="@id/another_view"
        android:layout_toRightOf="@id/another_view"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:textOff="@string/disabled"
        android:textOn="@string/enabled"
        android:fontFamily="sans-serif-condensed"
        />

Отображается переключатель, когда targetSdkVersion=19:

Отображается переключатель, когда targetSdkVersion=21:

Обратите внимание, что предварительный рендеринг в Android Studio по-прежнему создает переключатель с текстом, но переключатель теряет свой текст, когда на устройстве с Lollipop (Nexus 5) запускается apk, созданный с targetSdkVersion = 21. Запуск apk, созданного с targetSdkVersion = 19 на том же устройстве Lollipop, правильно отображает переключатель с текстом, как и ожидалось.

Зачем? Любые предлагаемые обходные пути?

1 ответ

Решение

Текст не отображается по умолчанию в теме "Материал", поскольку ресурсы виджета-переключателя плохо работают с текстом. Любой текст, который вы зададите, будет использоваться для описания контента для служб доступности.

Вы можете изменить это, используя android:showText собственность или Switch.setShowText(boolean) метод.

<Switch
    ...
    android:showText="true" />

Если вы используете ключи AppCompat, используйте app:showText вместо.

Другие вопросы по тегам