Переключение темы по всему приложению программно?
-
10-10-2019 - |
Вопрос
Я пытаюсь получить выбранную пользователем тему и чувствую, что я разочаровывающе близко. Определение темы в AndroidManifest.xml
Работает так, как должно, но (как лучше я могу сказать) не может измениться на основе предпочтений приложений:
<application
android:theme="@style/theme_sunshine"
android:icon="@drawable/icon"
android:label="@string/app_name">
В качестве альтернативы, установление его динамического в каждом деятельности также работает:
someChosenTheme = PreferenceManager.getDefaultSharedPreferences(this).getString("themePreference", "theme_twilight");
setTheme(someOtherChosenTheme);
Но это кажется грязным, и я бы предпочел установить тему для всего приложения в одном месте. Моя первая мысль состояла в том, чтобы захватить контекст приложения, как только моя основная деятельность запустится и сделает это там:
getApplicationContext().setTheme(R.style.theme_dummy);
Как можно лучше сказать, это Должен сделать свое дело, но на самом деле оно ничего не делает - все приложение имеет стиль Android по умолчанию. Вышеуказанное действительно, и если да, то могу ли я делать что -то еще глупое?
Я работаю на уровне API 3, если это важно. Подачи в правильном направлении очень ценится!
Решение
Создайте базовую деятельность для вашего приложения и переопределите Oncreate, чтобы установить тему. Выведите все другие свои действия от этой базовой деятельности.
Также проверьте этот урок:http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html
Другие советы
В этом может быть хорошее решение, но я не смог его найти, поэтому в итоге я сделал небольшой статический вспомогательный метод в помощном классе, который занимает деятельность и в основном выполняет те две линии, которые вы написали. Конечно, это не идеально, а просто добавление одной короткой строки кода в каждый onCreate()
Метод в моем приложении был терпим.