Wieso kann ich über mein Preference das Theme nicht ändern?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Wieso kann ich über mein Preference das Theme nicht ändern?

    Der Code, der nicht funktioniert:

    Java-Quellcode

    1. import android.os.Bundle;
    2. import androidx.appcompat.app.AppCompatDelegate;
    3. import androidx.preference.ListPreference;
    4. import androidx.preference.Preference;
    5. import androidx.preference.PreferenceFragmentCompat;
    6. import androidx.preference.PreferenceScreen;
    7. import htl.grieskirchen.pos.android.filmapp.R;
    8. public class MySettingsFragment extends PreferenceFragmentCompat {
    9. private String theme;
    10. @Override
    11. public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
    12. setPreferencesFromResource(R.xml.preferences, rootKey);
    13. PreferenceScreen screen = getPreferenceScreen();
    14. final ListPreference listPreference = (ListPreference) findPreference("theme");
    15. int api = android.os.Build.VERSION.SDK_INT;
    16. if (api < 29) {
    17. assert listPreference != null;
    18. screen.removePreference(listPreference);
    19. }
    20. assert listPreference != null;
    21. listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
    22. @Override
    23. public boolean onPreferenceChange(Preference preference, Object newValue) {
    24. listPreference.setValue(newValue.toString());
    25. theme = String.valueOf(listPreference.getEntry());
    26. if (theme.equals("Hell")) {
    27. AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    28. }
    29. if (theme.equals("Dunkel")) {
    30. AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    31. }
    32. if (theme.equals("Standart vom System übernehmen")) {
    33. AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
    34. }
    35. return true;
    36. }
    37. });
    38. }
    39. }
    Alles anzeigen



    Das XML zu dem Preference:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:app="http://schemas.android.com/apk/res-auto">
    4. <ListPreference
    5. android:id="@+id/listTheme"
    6. android:defaultValue="light"
    7. app:entries="@array/theme_entries"
    8. app:entryValues="@array/theme_values"
    9. app:key="theme"
    10. app:title="@string/changeBackground"
    11. app:useSimpleSummaryProvider="true"/>
    12. </PreferenceScreen>
    Alles anzeigen

    Verwendete Arrays:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <resources>
    3. <string-array name="theme_entries" >
    4. <item>Hell</item>
    5. <item>Dunkel</item>
    6. <item>Standard vom System übernehmen</item>
    7. </string-array>
    8. <string-array name="theme_values">
    9. <item>light</item>
    10. <item>dark</item>
    11. <item>default1</item>
    12. </string-array>
    13. </resources>
    Alles anzeigen

    In den angefügten Bildern ist sichtbar was funktioniert und was nicht. Die Preferences werden angezeigt, kann auch was auswählen, aber das einzige was sich ändert sieht man im Bild Ergebnis (der Text unter "Hintergrund ändern") aber das Theme ändert sich nicht.
    Bilder
    • Ergebnis.png

      48,31 kB, 504×851, 26 mal angesehen
    • Auswahl des Themes.png

      73,98 kB, 507×854, 19 mal angesehen