2011-02-01 3 views
20

Я готовлю свое приложение для бесперебойной работы с сотами. У меня есть небольшой эстетический вопрос, связанный с темой android.Изменить тему в зависимости от версии для Android

Для сотов рекомендуется использовать следующую тему.

android:theme="@android:style/Theme.Holo.Light" 

Как я могу использовать приложение для использования другой темы в предыдущей версии?

Заранее спасибо

ответ

32

EDIT: Обновление для выпущенной версии 3.0 SDK.


Один из способов сделать это - установить <uses-sdk android:targetSdkVersion="11">. Вы также должны разместить это выше своего определения <application>. Это позволит системе использовать голографическую тему, если она доступна, и тему по умолчанию в противном случае.

Другой способ сделать это - определить тему, скажем MyTheme, которая наследуется от другой темы в зависимости от версии API/версии ОС. Вы можете сделать это, используя resource directory qualifiers.

Ваша структура каталогов может выглядеть следующим образом:

res/ 
    values/ 
    styles.xml 
    values-v11/ 
    styles.xml 

Содержимое res/values/styles.xml будет что-то вроде:

<resources> 
    <style name="MyTheme" parent="@android:style/Theme.Light"> 
    ... 
    </style> 
</resources> 

И содержание res/values-v11/styles.xml будет что-то вроде:

<resources> 
    <style name="MyTheme" parent="@android:style/Theme.Holo.Light"> 
    ... 
    </style> 
</resources> 

Обратите внимание, что в футу re, тема Holo может не всегда иметь смысл по уровню API, поэтому вам может понадобиться позже подкорректировать этот подход. Вы также можете использовать другие классификаторы каталогов, такие как values-large-v11 или тому подобное. Это полностью зависит от вас.

+0

Удивительный, спасибо Роман. Мне любопытно, что вы подразумеваете под «Обратите внимание, что в будущем тема Holo может не всегда иметь смысл по уровню API». Вы хотите сказать, что тема Holo может отличаться или добавить новую тему в будущих выпусках? Таким образом, разработчику может потребоваться разместить больше тем? Это затрудняет просто сделать что-то вроде темы по умолчанию (будь то Theme или Theme.Holo) с NoTitleBar. В любом случае, спасибо за любые разъяснения; Я с нетерпением жду ICS –

+0

Это был довольно недальновидный комментарий :-) Поразите его сейчас. Holo определенно имеет смысл для API 11+, независимо от физического размера. –

+0

@ RomanNurik - я не получаю автозаполнение, чтобы распознать Holo Light, даже если цель равна 11. Только после изменения в project.properties цель для android-11, был проект, который смог скомпилировать и автозаполнение работал. –