Переключение темы приложения программно? - PullRequest
38 голосов
/ 12 января 2011

Я пытаюсь получить выбранную пользователем тему и чувствую, что я разочарованно близок. Определение темы в 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, если это имеет значение. Сады в правильном направлении очень ценятся!

Смежный вопрос.

Ответы [ 2 ]

31 голосов
/ 12 января 2011

Создайте базовую активность для своего приложения и переопределите onCreate, чтобы установить тему.Получите все ваши другие виды деятельности из этой базовой деятельности.

Также проверьте этот учебник: http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html

5 голосов
/ 12 января 2011

Для этого может быть хорошее решение, но я не смог его найти, поэтому в итоге я создал небольшой статический вспомогательный метод в классе помощника, который принимает Activity и в основном выполняет две написанные вами строки.Конечно, это не идеально, но просто добавить одну короткую строку кода для каждого метода onCreate() в моем приложении было допустимо.

...