Der Code, der nicht funktioniert:
Java
import android.os.Bundle;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceScreen;
import htl.grieskirchen.pos.android.filmapp.R;
public class MySettingsFragment extends PreferenceFragmentCompat {
private String theme;
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
PreferenceScreen screen = getPreferenceScreen();
final ListPreference listPreference = (ListPreference) findPreference("theme");
int api = android.os.Build.VERSION.SDK_INT;
if (api < 29) {
assert listPreference != null;
screen.removePreference(listPreference);
}
assert listPreference != null;
listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
listPreference.setValue(newValue.toString());
theme = String.valueOf(listPreference.getEntry());
if (theme.equals("Hell")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}
if (theme.equals("Dunkel")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
if (theme.equals("Standart vom System übernehmen")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
}
return true;
}
});
}
}
Alles anzeigen
Das XML zu dem Preference:
XML
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ListPreference
android:id="@+id/listTheme"
android:defaultValue="light"
app:entries="@array/theme_entries"
app:entryValues="@array/theme_values"
app:key="theme"
app:title="@string/changeBackground"
app:useSimpleSummaryProvider="true"/>
</PreferenceScreen>
Alles anzeigen
Verwendete Arrays:
XML
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="theme_entries" >
<item>Hell</item>
<item>Dunkel</item>
<item>Standard vom System übernehmen</item>
</string-array>
<string-array name="theme_values">
<item>light</item>
<item>dark</item>
<item>default1</item>
</string-array>
</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.