Переключение темы по всему приложению программно?

StackOverflow https://stackoverflow.com/questions/4663752

  •  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() Метод в моем приложении был терпим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top