E java.lang.IllegalStateException: Must specify preferenceTheme in theme
E at android.support.v7.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:202)
Jetzt kann man die Bibliothek ziemlich einfach benutzen. Hier ist der schnellste Weg, dies zu tun, aber Sie sollten die README-Datei für weitere Informationen lesen.
1. Aktualisieren Sie die Gradle-Datei Ihres Moduls:
compile 'com.takisoft.fix:preference-v7:27.0.0.0'
2. Verwenden Sie die entsprechende Klasse als Basis Ihres Fragments
Sie können beide verwenden PreferenceFragmentCompat oder PreferenceFragmentCompatDividers.
(Achten Sie beim Import auf den passenden Paketnamen PreferenceFragmentCompat!)
3. Verwenden Sie das entsprechende Design
Stellen Sie das Thema Ihrer enthaltenden Aktivität auf eine Variante von ein @style/PreferenceFixThemewie NoActionBar, Light usw.
Weitere Informationen und Anwendungstipps finden Sie unter Projektseite.
PS In diesem Abschnitt finden Sie die detaillierte Lösung, die zur Erstellung der Bibliothek geführt hat, aber ich habe mich entschieden, sie zu entfernen, weil sie verwirrend sein könnte. Wenn Sie neugierig auf die Schritte sind, finden Sie sie immer noch im Überarbeitungsverlauf dieser Antwort.
Die Standardtextgröße ist zu groß, ich habe versucht, sie mit diesen Stilen zu ändern, auf die Sie ohne Erfolg hingewiesen haben. Hast du es vielleicht geschafft, die Textgröße anzupassen?
– Tinashe
20. August 15 um 7:13 Uhr
Ich versuche, das Materialdesign dort einzufügen, aber nicht wirklich erfolgreich … Was ich während des Prozesses entdeckt habe, ist, dass dem v7-Einstellungspaket der Materialstil, das Layout und andere Dateien vollständig fehlen. Inzwischen enthält v14 einige davon, aber das Problem mit v14 ist, dass es das native Fragment erweitert, nicht das Support-Fragment. Ich denke, Google hat hier gerade einen wirklich großen Fehler gemacht, hoffentlich beheben sie ihn so schnell wie möglich …
– Gergely Kőrössy
20. August 15 um 13:38 Uhr
Ich könnte versuchen, das Materialdesign auch für Geräte vor 21 umzusetzen, sie sehen jetzt genauso aus wie das Original.
Das ist lächerlich. Es würde mich weniger Zeit kosten, ein Einstellungsfragment von Grund auf neu zu erstellen, als einen Weg durch alle Fehler, Problemumgehungen und Tests zu finden, die erforderlich sind, damit dies auf allen Versionen zu 100 % funktioniert.
– Eduard van Raak
27. Februar 16 um 11:30 Uhr
Sie müssen im Thema Ihrer Einstellungsaktivität das Einstellungsthema angeben.
PreferenceThemeOverlay ist das Standarddesign, das mit der Preference-v7-Unterstützungsbibliothek geliefert wird.
Das funktioniert, sieht aber falsch aus. Die Schriftarten der Einstellungselemente sind zu groß (getestet auf Android 4.1 und 5.1).
– Benutzer3692719
18. August 15 um 13:38 Uhr
@mus65 Das ist das Problem. Ich hatte vermutet, dass ich dieses Thema verwenden sollte, aber es sieht schlecht aus. Ich habe der ursprünglichen Frage weitere Details hinzugefügt.
– Verwicklungen
18. August 15 um 18:22 Uhr
Ich habe dies als die richtige Antwort ausgewählt, weil es die erste war, die das richtige Thema zum Einstellen sagte. Die Support-Bibliothek muss jedoch so angepasst werden, dass die Einstellungen das Materialdesign gemäß verwenden code.google.com/p/android/issues/detail?id=183376
– Verwicklungen
1. September 15 um 9:01 Uhr
Wie lasse ich das Thema Materialdesign aussehen? Derzeit zeigt es für mich den nativen Look …
– Android-Entwickler
5. September 15 um 16:19 Uhr
Lesen Sie meine Antwort unten.
– Gergely Kőrössy
6. September 15 um 18:36 Uhr
Srikar Reddy
Scheint, als hätte Google dieses Problem behoben. Getestet habe ich das mit der Einstellung v14-support Version 25.3.1
1) Hinzufügen implementation 'com.android.support:preference-v14:25.3.1' zu deinem Gradle.
2) Hinzufügen PreferenceThemeOverlay.v14.Material zum Stil statt PreferenceThemeOverlay.
3) Fügen Sie schließlich den Stil zum Manifest hinzu
android:theme="@style/AppTheme.SettingsTheme"
Das einzige Problem bei dieser Antwort ist, dass das Einstellungsfragment das Materialdesign auf Systemen verwendet, auf denen KitKat und niedriger ausgeführt wird. Einstellung preferenceTheme zu PreferenceThemeOverlay.v14 in styles.xml und zu PreferenceThemeOverlay.v14.Material in styles-v21.xml behebt das Problem.
– Jack Meister
9. Januar 18 um 22:26 Uhr
@JackMeister Sie sollten die v14-Version nur verwenden, wenn Sie auf API-Level 14 oder höher abzielen. Die Theme-Inkompatibilität mit älteren Versionen ist möglicherweise nicht Ihr einziges Problem, wenn Sie v14 mit älteren API-Levels verwenden.
– Jelmer Marken
15. Januar 18 um 14:48 Uhr
@JelmerBrands Sicher: Sie sollten keine v14-Unterstützungsbibliothek auf Systemen verwenden, auf denen API-Ebenen unter 14 ausgeführt werden. Mein Kommentar geht davon aus, dass a minSdkVersion zwischen 14 und 20.
– Jack Meister
15. Januar 18 um 20:32 Uhr
Getestet mit 23.4.0, das genauso gut funktioniert. Die Verwendung der v14-Präferenz, nicht der v7-Präferenz, ist der Schlüssel.
– Benutzer149408
23. Oktober 18 um 23:28 Uhr
Um die zu verwenden PreferenceFragmentCompat musst du einstellen preferenceTheme in deinem thema:
Auf diese Weise können Sie die anpassen preferenceTheme um die für jeden Einstellungstyp verwendeten Layouts zu gestalten, ohne andere Teile Ihrer Aktivität zu beeinflussen.
Ich habe gerade diese Zeile im Thema hinzugefügt und sie funktioniert perfekt auf API 19 und höher.
Dies ist die einfachste funktionierende Lösung, die keine zusätzliche Abhängigkeit erfordert. Sollte IMHO die akzeptierte Antwort sein, jetzt, da die meisten Apps mindestens API 14+ sind
– Ludwig CAD
5. Mai 17 um 13:49 Uhr
Android Studio kann dies nicht finden
– Deny
22. Januar 18 um 19:10 Uhr
com.android.support:preference-v14: zu build.gradle hinzufügen
– Sofi Software LLC
15. Februar 18 um 18:27 Uhr
Prashant Paliwal
Fügen Sie diesen Code Ihrer styles.xml hinzu und ändern Sie ihn entsprechend. Es sollte gut funktionieren.
Dies ist die einfachste funktionierende Lösung, die keine zusätzliche Abhängigkeit erfordert. Sollte IMHO die akzeptierte Antwort sein, jetzt, da die meisten Apps mindestens API 14+ sind
– Ludwig CAD
5. Mai 17 um 13:49 Uhr
Android Studio kann dies nicht finden
– Deny
22. Januar 18 um 19:10 Uhr
com.android.support:preference-v14: zu build.gradle hinzufügen
– Sofi Software LLC
15. Februar 18 um 18:27 Uhr
voghDev
Lösung, die für mich in API 25 funktioniert hat. Ich hatte dieses Standarddesign:
Hier ist ein Fehler in der Dokumentation: code.google.com/p/android/issues/…
– Verwicklungen
21. August 15 um 11:30 Uhr
Ich persönlich denke nicht, dass diese Lösungen die Problemumgehungen wert sind. Versuchen github.com/kolavar/android-support-v4-preferencefragment
– MidasLefko
15. Oktober 15 um 18:12 Uhr
Können Sie bitte stackoverflow.com/a/44236460/238753 als akzeptierte Antwort markieren?
– Sam
17. März 18 um 0:35 Uhr