2011-02-01 21 views
20

Sto preparando la mia app per funzionare senza problemi con il nido d'ape. Ho una piccola domanda estetica riguardo al tema Android.Cambia tema in base alla versione Android

Per il nido d'ape si consiglia di utilizzare il seguente tema.

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

Come posso fare in modo che l'app utilizzi un altro tema quando è utilizzato in una versione precedente?

Grazie in anticipo

risposta

32

EDIT: Aggiornato per la versione rilasciata del SDK 3.0.


Un modo per fare ciò è impostare <uses-sdk android:targetSdkVersion="11">. Dovresti posizionarlo sopra la definizione <application>. Questo dirà al sistema di usare il tema olografico se è disponibile, e il tema predefinito altrimenti.

Un altro modo per farlo è definire un tema, ad esempio MyTheme, che eredita da un tema diverso a seconda del livello API/versione del sistema operativo. È possibile farlo utilizzando resource directory qualifiers.

vostra struttura di directory potrebbe essere la seguente:

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

Il contenuto di res/values/styles.xml sarebbe qualcosa di simile:

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

E il contenuto di res/values-v11/styles.xml sarebbe qualcosa di simile:

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

Nota che nel futu Tuttavia, il tema di Holo potrebbe non avere sempre un senso a livello di API, quindi potrebbe essere necessario modificare questo approccio in seguito. È inoltre possibile utilizzare altri qualificatori di directory come values-large-v11 o simili. Dipende solo da te.

+0

Impressionante, grazie Roman. Sono curioso di cosa intendi per "Nota che in futuro il tema di Holo potrebbe non avere sempre un senso a livello di API". Intendi dire che il tema di Holo potrebbe essere diverso o un tema completamente nuovo aggiunto nelle versioni future? Quindi lo sviluppatore potrebbe aver bisogno di ospitare più temi? Ciò rende difficile fare semplicemente qualcosa come usare il tema predefinito (che sia Theme o Theme.Holo) con NoTitleBar. Comunque, grazie per qualsiasi chiarimento; Non vedo l'ora di ICS –

+0

Questo è stato un commento piuttosto miope :-) Striking out now. Holo ha sicuramente un senso per API 11+, indipendentemente dalle dimensioni fisiche. –

+0

@RomanNurik - Non ottengo il completamento automatico per riconoscere Holo Light, anche quando l'obiettivo è 11. Solo dopo aver modificato in project.properties il target su Android-11, il progetto è stato in grado di compilare e il completamento automatico lavorato. –

Problemi correlati