Für PreferenceFragmentCompat muss das PreferenceTheme festgelegt werden

Lesezeit: 7 Minuten

Fur PreferenceFragmentCompat muss das PreferenceTheme festgelegt werden
Verwicklungen

Mit dem neuen PreferenceFragmentCompat aus der v7 Preference Support Library: http://developer.android.com/tools/support-library/features.html#v7-preferencebekomme ich diesen Fehler

E  java.lang.IllegalStateException: Must specify preferenceTheme in theme
E      at android.support.v7.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:202)

Welches Thema soll eingestellt werden?

Aktualisieren: Ich habe versucht, mit

<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>

wie von @Bogato vorgeschlagen, aber es sieht nicht richtig aus und sieht sogar auf Lollipop sehr Holo aus.

Support-Bibliothek:

Geben Sie hier die Bildbeschreibung ein

Native Einstellungen:

Geben Sie hier die Bildbeschreibung ein

Fur PreferenceFragmentCompat muss das PreferenceTheme festgelegt werden
Gergely Körössy

Das Beispielprojekt finden Sie hier

Der Bugfix ist als Gradle-Abhängigkeit verfügbar

Herunterladen

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.

    – Gergely Kőrössy

    21. August 15 um 13:25 Uhr

  • Sie sollten auch erwähnen, dass der PreferenceFragmentCompat abstürzt, wenn er mit einem offenen Dialog gedreht wird. code.google.com/p/android/issues/detail?id=186160

    – Köpfevk

    26. Januar 16 um 13:19 Uhr

  • 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.

Beispielsweise :

<style name="SettingsTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>

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

1641767529 139 Rand zwischen einem RadioButton und seinem Label in Android hinzufugen
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.

<style name="AppTheme.SettingsTheme" parent="AppTheme.NoActionBar">
    <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>

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:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
  ...
  <item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>

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.

<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>

  • 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

1643913790 483 Fur PreferenceFragmentCompat muss das PreferenceTheme festgelegt werden
Prashant Paliwal

Fügen Sie diesen Code Ihrer styles.xml hinzu und ändern Sie ihn entsprechend. Es sollte gut funktionieren.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>

<style name="PreferenceThemeOverlay">
    <item name="preferenceScreenStyle">@style/Preference.PreferenceScreen</item>
    <item name="preferenceFragmentStyle">@style/PreferenceFragment</item>
    <item name="preferenceCategoryStyle">@style/Preference.Category</item>
    <item name="preferenceStyle">@style/Preference</item>
    <item name="preferenceInformationStyle">@style/Preference.Information</item>
    <item name="checkBoxPreferenceStyle">@style/Preference.CheckBoxPreference</item>
    <item name="switchPreferenceCompatStyle">@style/Preference.SwitchPreferenceCompat</item>
    <item name="dialogPreferenceStyle">@style/Preference.DialogPreference</item>
    <item name="editTextPreferenceStyle">@style/Preference.DialogPreference.EditTextPreference</item>
    <item name="preferenceFragmentListStyle">@style/PreferenceFragmentList</item>
</style>

  • 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

1643913790 536 Fur PreferenceFragmentCompat muss das PreferenceTheme festgelegt werden
voghDev

Lösung, die für mich in API 25 funktioniert hat. Ich hatte dieses Standarddesign:

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

Und fügte diese Zeile hinzu

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>

PreferenceThemeOverlay war bereits definiert, ich musste es nicht einschließen. Es funktionierte auf meinen eigenen Android 4.x- und 5.x-Geräten

.

758790cookie-checkFür PreferenceFragmentCompat muss das PreferenceTheme festgelegt werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy