Выбор стиля / темы программно во время выполнения - PullRequest
4 голосов
/ 28 июля 2011

У меня есть устройство A и устройство B.

Я легко могу определить, работает ли приложение на устройстве A или на устройстве B. Теперь мне нужно использовать тему (стили) для устройства A и другое на устройстве B.

Как я могу это сделать?

1 Ответ

8 голосов
/ 28 июля 2011

В вашем Activity.onCreate () вы можете вызвать setTheme (), чтобы установить тему, которую хотите использовать.Обратите внимание, что это должно быть сделано до , когда вы вызываете setContentView () или иным образом создаете свой пользовательский интерфейс.

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

Если вы хотите, чтобы ваша тема изменялась в зависимости от устройстваКонфигурация - например, версия платформы или размер экрана - вы можете сделать это через ресурсы.Просто объявите разные версии вашей темы для разных конфигураций, которые вы хотите.Формат файла будет выглядеть примерно так:

values/
    styles.xml   # Required default theme
values-v11/
    styles.xml   # Theme when running on Android 3.0 or higher
values-xlarge/
    styles.xml   # Theme when running on an xlarge screen

-v11 позволяет вам иметь версию темы, которая использует новую тему при работе на более новых платформах, а затем возвращается к чему-то совместимому со старыми версиями.Например, в стиле values-v11 родителем вашей темы может быть новый @android: style / Theme.Holo, в то время как основной будет наследоваться от более старого @android: style / Theme.

Также Android 3.0 даетВы можете изменить свою тему во время выполнения, попросив перезапустить вашу активность, например, когда происходит изменение конфигурации: http://developer.android.com/reference/android/app/Activity.html#recreate()

После вызова этого новый созданный экземпляр Activity может вызвать setTheme () с другим значением (например, на основе информации в сохраненном состоянии экземпляра или общим предпочтением), чем тема, которая использовалась ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...