web-dev-qa-db-fra.com

Android Changer le widget textOn et textOff ne fonctionne pas dans Lollipop

Le comportement du widget switch a changé dans 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"
        />

Commutateur rendu lorsque targetSdkVersion = 19:

enter image description here

Commutateur rendu lorsque targetSdkVersion = 21:

enter image description here

Notez que l'aperçu du rendu dans Android Studio produit toujours un commutateur avec du texte, mais le commutateur perd son texte lorsqu'un apk construit avec targetSdkVersion = 21 est exécuté sur un appareil avec Lollipop (Nexus 5). une apk construite avec targetSdkVersion = 19 sur le même appareil Lollipop rend le commutateur correctement avec du texte comme prévu.

Pourquoi? Des solutions de contournement suggérées?

49
Jim Vitek

Le texte n'est pas affiché par défaut sous le thème Matériau, car les actifs du widget de commutation ne fonctionnent pas bien avec le texte. Tout texte que vous définissez sera utilisé pour décrire le contenu des services d'accessibilité.

Vous pouvez changer cela en utilisant la propriété Android:showText ou la méthode Switch.setShowText(boolean) .

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

Si vous utilisez des commutateurs AppCompat, utilisez plutôt app:showText.

125
alanv