Avec le nouveau PreferenceFragmentCompat de la bibliothèque de prise en charge des préférences v7: http://developer.android.com/tools/support-library/features.html#v7-preference , j'obtiens cette erreur
E java.lang.IllegalStateException: Must specify preferenceTheme in theme
E at android.support.v7.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:202)
Quel thème doit être défini?
Mise à jour: j'ai essayé d'utiliser
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
comme suggéré par @Bogato mais cela n'a pas l'air correct et semble très Holo même sur Lollipop.
Bibliothèque de support:
Préférences natives:
android
android-fragments
android-support-library
preferencefragment
preference-v7
Les intrications
la source
la source
Réponses:
Le correctif est disponible en tant que dépendance gradle
Maintenant, on peut utiliser la bibliothèque assez facilement. Voici le moyen le plus rapide de le faire, mais vous devriez consulter le README pour plus d'informations.
1. Mettez à jour le fichier gradle de votre module:
compile 'com.takisoft.fix:preference-v7:27.0.0.0'
2. Utilisez la classe appropriée comme base de votre fragment
Vous pouvez utiliser soit
PreferenceFragmentCompat
ouPreferenceFragmentCompatDividers
.( Faites attention au nom du package approprié lors de l'importation
PreferenceFragmentCompat
! )3. Utilisez le thème approprié
Définissez le thème de votre activité
@style/PreferenceFixTheme
conteneur sur une variante de , comme NoActionBar, Light, etc.PS Dans cette section, vous pouvez trouver la solution détaillée qui a conduit à la création de la bibliothèque, mais j'ai décidé de la supprimer car elle pourrait prêter à confusion. Si vous êtes curieux de connaître les étapes, vous pouvez toujours les trouver dans l' historique des révisions de cette réponse.
la source
Vous devez spécifier le thème de préférence dans le thème de votre activité de préférence.
Par exemple :
PreferenceThemeOverlay est le thème par défaut fourni avec la bibliothèque de support de préférence-v7.
la source
On dirait que Google a résolu ce problème. J'ai testé cela avec la préférence v14-support version 25.3.1
1) Ajoutez
implementation 'com.android.support:preference-v14:25.3.1'
à votre Gradle.2) Ajoutez
PreferenceThemeOverlay.v14.Material
au style au lieu dePreferenceThemeOverlay
.3) Enfin, ajoutez le style au Manifest
la source
preferenceTheme
surPreferenceThemeOverlay.v14
instyles.xml
et surPreferenceThemeOverlay.v14.Material
instyles-v21.xml
résout le problème.minSdkVersion
entre 14 et 20.Pour utiliser le PreferenceFragmentCompat, vous devez définir
preferenceTheme
dans votre thème:De cette manière, vous pouvez personnaliser le
preferenceTheme
style des dispositions utilisées pour chaque type de préférence sans affecter les autres parties de votre activité.la source
Je viens d'ajouter cette ligne dans le thème et cela fonctionne parfaitement sur l'API 19 et plus.
la source
Solution qui a fonctionné pour moi dans l'API 25. J'avais ce thème par défaut:
Et y a ajouté cette ligne
PreferenceThemeOverlay était déjà défini, je n'avais pas besoin de l'inclure. Cela a fonctionné sur mes propres appareils Android 4.x et 5.x
la source
Ajoutez ce code à votre styles.xml et modifiez-le en conséquence. Cela devrait fonctionner correctement.
la source
J'ai ajouté l'élément "preferenceTheme" dans mon style et cela a semblé résoudre le problème:
la source
Le site le plus utile pour moi: Moyen
L'auteur montre que nous devons ajouter deux packages:
com.android.support:preference-v7
etcom.android.support:preference-v14
, parce que le premier est distribué sans styles.Dites moi si ca marche
la source
Le "Takisoft Fix" accepté semble plutôt kludgy et après avoir joué avec, je ne suis toujours pas satisfait du look qui en résulte.
Si vous avez besoin de la
PreferenceFragment
bibliothèque de support API 9+ , je vous recommande d'utiliser la bibliothèque de support de préférence de matériau . Cela fonctionne parfaitement (du moins pour moi).la source
Le problème se produit car l'AAPT (Android Asset Packaging Tool) ne peut pas trouver certaines ressources. Résolvez ce problème comme suit:
1. Copiez les ressources nécessaires dans un nouveau dossier de ressources répondant, nommé comme res_fw_v7_preference ou autre chose.
Utilisez gradle pour créer votre application et ajoutez des options AAPT supplémentaires dans build.gradle (modules) comme ceci:
J'espère que cela vous sera utile :)
la source
Merci @sergio pour la réponse, utiliser
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
au lieu de<item name="preferenceTheme">@style/Preference</item>
fonctionne très bien pour moi.la source
Laissez-le aller et utilisez l'API 11+.
API 7 a presque sept ans maintenant.
la source