2016-02-15 3 views
3

J'essaie d'afficher un switchPreference qui permet à l'utilisateur d'afficher la distance en miles ou en kms. J'utilise la bibliothèque de support SwitchPreferenceCompat. Selon la bibliothèque, je peux utiliser le textSwitchOff et le textSwitchOn pour ajouter le texte au commutateur. Je veux juste ajouter "km" ou "miles" à mon commutateur afin que l'utilisateur sache quelle métrique est affichée.SwitchPreferenceCompat: android: switchTextOff/switchTextOn ne fonctionne pas

Selon this doc, tout ce que je besoin est le code ci-dessous:

<android.support.v7.preference.PreferenceCategory 
    android:layout="@layout/preferences_category" 
    android:title="Distance" > 

    <android.support.v7.preference.SwitchPreferenceCompat android:title="KM or Miles" 
     android:key="kmormiles" 
     android:switchTextOff="miles" 
     android:switchTextOn="km" 
     android:defaultValue="true"/> 

</android.support.v7.preference.PreferenceCategory> 

Cependant, le commutateur ressemble à un interrupteur normal, il n'y a pas de texte supplémentaire sur le commutateur lui-même.

enter image description here

Comment puis-je obtenir à afficher avec le texton et textOff?

J'ai aussi essayé ce qui suit:

addPreferencesFromResource(R.xml.preferences); 
    kmormiles = (SwitchPreferenceCompat) findPreference("kmormiles"); 
    kmormiles.setSwitchTextOff("Km"); 
    kmormiles.setSwitchTextOn("miles"); 

ne fonctionne toujours pas. Je l'essaie sur deux émulateurs de genymotion différents, API 16 et API 21.

+2

Avez-vous vérifié cette question? http://stackoverflow.com/a/27278223/4860513 – W0rmH0le

+0

Oui - cela n'aide pas car c'est pour le commutateur. C'est pour SwitchPreferenceCompat. Les docs ne font même pas référence à une option showText. – Simon

+0

Juste pour éviter toute confusion de ma part: vous voulez voir le texte à l'intérieur du bouton Orange Switch, n'est-ce pas? Ou où il affiche KM ou Miles? – W0rmH0le

Répondre

5

En raison de SwitchPreferenceCompat en utilisant un widget SwitchCompat par défaut, Android Switch widget textOn and textOff not working in Lollipop a une application ici aussi. Et la première instruction

Le texte n'est pas affiché par défaut sous le thème Matériau, car les éléments du widget de commutation ne fonctionnent pas bien avec le texte.

explique également, pourquoi le résultat ne semble pas bon du tout.

La classe SwitchPreferenceCompat ne permet pas de définir si le texte activé/désactivé doit être affiché. Donc, une façon de le faire pourrait remplacer la méthode onBindViewHolder(PreferenceViewHolder) pour le définir par programme.

Une autre méthode, et peut-être meilleure, est l'utilisation des mécanismes thématiques que vous êtes obligés d'utiliser de toute façon avec la bibliothèque de préférences. Vous ne pouvez pas définir directement un attribut pour les vues, mais vous pouvez définir la disposition à utiliser avec android:widgetLayout. Il suffit donc de créer votre propre superposition de thème préférence

<style name="MyPreferenceThemeOverlay" parent="PreferenceThemeOverlay"> 
    <item name="switchPreferenceCompatStyle">@style/MySwitchPreferenceCompat</item> 
</style> 

avec votre propre style de préférence commutateur

<style name="MySwitchPreferenceCompat" parent="Preference.SwitchPreferenceCompat"> 
    <item name="android:widgetLayout">@layout/pref_stack</item> 
</style> 

en utilisant légèrement modifiés default switch layout

<android.support.v7.widget.SwitchCompat 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/switchWidget" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@null" 
    android:clickable="false" 
    android:focusable="false" 
    app:showText="true" /> 

Une autre chose que vous devez garder à l'esprit avec votre code est la fonctionnalité compat elle-même. En utilisant android.support.v7.preference.SwitchPreferenceCompat explicitement, vous n'aurez jamais des versions plus adaptées aux appareils plus récents que le gonfleur connaît automatiquement comme la seule alternative actuellement disponible android.support.v14.preference.SwitchPreferenceCompat. Cela pourrait impliquer un peu plus de travail de votre côté si.

EDIT: Voici les résultats de la mise en œuvre de la suggestion ci-dessus par l'affiche, comme il a mentionné correctement, les résultats ne semblent pas bonnes du tout:

enter image description here

enter image description here

+0

Merci. Les résultats ne sont pas bons du tout. Je dois envisager d'utiliser des alternatives. Google devrait également envisager de changer leur javadocs pour switchPreferenceCompat. – Simon