Mit dem neuen PreferenceFragmentCompat aus der v7 Preference Support Library: http://developer.android.com/tools/support-library/features.html#v7-preference wird dieser Fehler angezeigt
E java.lang.IllegalStateException: Must specify preferenceTheme in theme
E at android.support.v7.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:202)
Welches Thema sollte eingestellt werden?
Update: Ich habe es versucht
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
wie von @Bogato vorgeschlagen, aber es sieht nicht richtig aus und sieht selbst auf Lollipop sehr holo aus.
Unterstützungsbibliothek:
Native Präferenzen:
android
android-fragments
android-support-library
preferencefragment
preference-v7
Komplikationen
quelle
quelle
Antworten:
Der Bugfix ist als Gradle-Abhängigkeit verfügbar
Jetzt kann man die Bibliothek ziemlich einfach benutzen. Hier ist der schnellste Weg, dies zu tun. Weitere Informationen finden Sie in der README-Datei.
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 für Ihr Fragment
Sie können entweder
PreferenceFragmentCompat
oder verwendenPreferenceFragmentCompatDividers
.( Achten Sie beim Import auf den entsprechenden Paketnamen
PreferenceFragmentCompat
! )3. Verwenden Sie das entsprechende Thema
@style/PreferenceFixTheme
Stellen Sie das Thema Ihrer enthaltenen Aktivität auf eine Variante von NoActionBar, Light usw. ein.PS In diesem Abschnitt finden Sie die detaillierte Lösung, die zur Erstellung der Bibliothek geführt hat. Ich habe mich jedoch entschlossen, sie zu entfernen, da sie möglicherweise verwirrend ist. Wenn Sie neugierig auf die Schritte sind, finden Sie sie immer noch im Revisionsverlauf dieser Antwort.
quelle
Sie müssen PreferenceTheme im Thema Ihrer Präferenzaktivität angeben.
Zum Beispiel :
PreferenceThemeOverlay ist das Standarddesign, das mit der Support-Bibliothek für Preference-v7 geliefert wird.
quelle
Google hat dieses Problem anscheinend behoben. Ich habe dies mit der Voreinstellung v14-support Version 25.3.1 getestet
1) Fügen Sie
implementation 'com.android.support:preference-v14:25.3.1'
Ihrem Gradle hinzu.2)
PreferenceThemeOverlay.v14.Material
Zum Stil hinzufügen stattPreferenceThemeOverlay
.3) Fügen Sie schließlich den Stil zum Manifest hinzu
quelle
preferenceTheme
vonPreferenceThemeOverlay.v14
instyles.xml
undPreferenceThemeOverlay.v14.Material
instyles-v21.xml
be behebt das Problem.minSdkVersion
zwischen 14 und 20 aus.Um den PreferenceFragmentCompat zu verwenden , müssen Sie
preferenceTheme
in Ihrem Thema Folgendes festlegen :Auf diese Weise können Sie das anpassen
preferenceTheme
, um die für jeden Voreinstellungstyp verwendeten Layouts zu formatieren, ohne andere Teile Ihrer Aktivität zu beeinflussen.quelle
Ich habe diese Zeile gerade zum Thema hinzugefügt und sie funktioniert perfekt unter API 19 und höher.
quelle
Lösung, die in API 25 für mich funktioniert hat. Ich hatte dieses Standardthema:
Und fügte diese Zeile hinzu
PreferenceThemeOverlay wurde bereits definiert, ich musste es nicht einschließen. Es funktionierte auf meinen eigenen Android 4.x- und 5.x-Geräten
quelle
Fügen Sie diesen Code zu Ihrer styles.xml hinzu und ändern Sie ihn entsprechend. Es sollte gut funktionieren.
quelle
Ich habe das Element "priorityTheme" in meinen Stil aufgenommen und das schien das Problem zu beheben:
quelle
Die hilfreichste Seite für mich: Mittel
Der Autor zeigt, dass wir zwei Pakete hinzufügen müssen:
com.android.support:preference-v7
undcom.android.support:preference-v14
, weil das erste ohne Stile verteilt wird.Lass mich wissen ob es funktioniert
quelle
Das akzeptierte "Takisoft Fix" wirkt ziemlich klobig und nachdem ich damit herumgespielt habe, bin ich immer noch nicht zufrieden mit dem resultierenden Look.
Wenn Sie eine API 9+
PreferenceFragment
Support-Bibliothek benötigen , empfehle ich die Verwendung der Material Preference Support Library . Es funktioniert perfekt (zumindest für mich).quelle
Das Problem tritt auf, weil das AAPT (Android Asset Packaging Tool) einige Ressourcen nicht finden kann. Beheben Sie dieses Problem wie folgt:
1.Kopieren Sie Ressourcen, die für einen neuen antwortenden Ressourcenordner mit dem Namen res_fw_v7_preference oder etwas anderem erforderlich sind.
2.Verwenden Sie gradle, um Ihre Anwendung zu erstellen und einige zusätzliche AAPT-Optionen in build.gradle (Modulen) wie folgt hinzuzufügen:
Hoffe das ist hilfreich :)
quelle
Vielen Dank an @sergio für die Antwort. Die Verwendung von
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
statt<item name="preferenceTheme">@style/Preference</item>
funktioniert für mich großartig.quelle
Lassen Sie es einfach los und verwenden Sie API 11+.
API 7 ist jetzt fast sieben Jahre alt.
quelle