Что вам нужно в ваших предпочтениях, это ListPreference
, как:
<ListPreference android:key="theme" android:title="@string/theme"
android:entries="@array/theme_names" android:entryValues="@array/themes" />
Затем в arrays.xml добавьте что-то вроде:
<array name="themes">
<item>dark</item>
<item>light</item>
<item>purple</item>
</array>
<array name="theme_names">
<item>@string/dark</item>
<item>@string/light</item>
<item>@string/purple</item>
</array>
А затем используйте setTheme () in onCreate()
:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String userTheme = prefs.getString("theme", "dark");
if (userTheme.equals("dark"))
setTheme(R.style.Theme_Dark);
else if (userTheme.equals("light"))
setTheme(R.style.Theme_Light);
// etc...
setContentView(R.layout.main);
Это означает, что вам может понадобиться перезапустить действие, чтобы onCreate()
снова вызывался. Но, в качестве альтернативы, вы можете вызвать setTheme()
в onResume()
и заново раздувать иерархию представления, чтобы тема работала при возврате из предпочтений, не требуя перезапуска действия.