Я хочу сделать возможным, чтобы пользователь моего приложения мог изменить стиль моего приложения. Поэтому он должен иметь возможность решить, отображается ли фоновое изображение, textSize/textColor разных textViews, цвет фона для активности.
Как это возможно?! Я знаю, как настроить стиль или тему, но я не знаю, как изменить ее по решению пользователей.
Можете ли вы мне помочь?!
Большое спасибо:)
Вы можете изменить стиль действия во время выполнения, но только для существующих стилей. Таким образом, вы могли бы, скажем, определить три стиля в разных файлах XML, перечислите их 3 своему пользователю, попросите их выбрать один и установите стиль с помощью Activity.setTheme()
. Тогда вам придется разрушить представление и воссоздать его. Android в настоящее время не поддерживает другие методы изменения стиля во время выполнения.
Что вам нужно в ваших предпочтениях: ListPreference
like:
<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() в 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()
и повторно раздуть иерархию представлений, чтобы тема была эффективной при возврате из настроек без необходимости перезапуска активности.