2011-03-11 1 views
73

Dans Android 3.0, le concept de "vérifié" peut être rendu en utilisant un arrière-plan "activé". Cela vous donne la barre persistante que vous voyez lorsque vous tapez sur un fragment de liste, fournissant le contexte pour le fragment à droite de la liste (par exemple, en tapant sur un dossier dans Gmail met en évidence un autre fragment de liste pour afficher les conversations dans ce dossier).Configuration de l'arrière-plan Android et de la barre de menus Persistance - L'utilisation de l'attribut sur les anciennes versions provoque un blocage - Existe-t-il une approche par thème/modèle?

Par exemple, les échantillons de fragments montrent des choses comme:

setListAdapter(new ArrayAdapter<String>(getActivity(), 
        android.R.layout.simple_list_item_activated_1, Shakespeare.TITLES)); 

Cette ressource (android.R.layout.simple_list_item_activated_1) est nouveau pour Android 3.0. Ce qui le rend « activé » est:

android:background="?android:attr/activatedBackgroundIndicator" 

Cette valeur de l'attribut est nouveau pour Android 3.0 et vous faire tomber en panne si vous essayez de l'utiliser sur les versions antérieures d'Android, de ce que je peux dire. Je veux définir l'arrière-plan de cette valeur magique pour la combinaison 3.0/grand/paysage, et l'ignorer autrement.

Je peux accomplir cela en ayant deux versions distinctes de la mise en page, une dans un ensemble de ressources -v11, une dans un ensemble de ressources ordinaires. C'est un peu moins DRY que je voudrais, car la majeure partie de la mise en page est la même, avec seulement un attribut inclus ou étant ignoré.

J'ai pris un coup de couteau à essayer d'utiliser les alias de ressources étirables, de sorte que le android:background peut se référer à l'alias et l'alias pourrait gérer la différenciation -v11, mais <bitmap> dessinables ne semblent pas aimer android:src="@null". Je pense qu'il existe une approche de styles et de thèmes pour ce problème, mais comme je n'ai jamais complètement compris la question (l'un de mes problèmes de connaissance Android les plus embarrassants), je ne suis pas complètement sûr de ce que je dois faire. .

Est-ce que quelqu'un a élaboré un modèle pour utiliser "activé" sur 3.0 et le sauter sur pré-3.0, au-delà des dispositions distinctes?

Merci!

+0

Est-ce que ne peut pas fonctionner ici? Ou différentes versions d'un thème peut-être? – alexanderblom

+0

@alexanderblom: '' n'aiderait pas ici - J'ai besoin de l'arrière-plan sur l'élément racine de la disposition des lignes. "différentes versions d'un thème" est certainement dans le domaine des possibilités, mais c'est pourquoi je pose la question. :-) – CommonsWare

+0

ouais à première vue des thèmes séparés -v11 ou pas semblent être le chemin à parcourir.Moins de copier/coller que faire une mise en page entière au moins:/ – schwiz

Répondre

57

Styles sont à votre ami ....

ont deux répertoires valeurs, on est des valeurs-v11, les autres valeurs par défaut.

Chaque répertoire de valeurs contient un fichier styles.xml, la différence étant que les valeurs par défaut contiennent;

<style name="listViewActivatedStyle"/> 

Les valeurs-v11 contiennent;

<style name="listViewActivatedStyle"> 
    <item name="android:background">?android:attr/activatedBackgroundIndicator</item> 
</style> 

Ensuite, vous pouvez avoir une seule mise en page qui utilise;

style="@style/listViewActivatedStyle" 

et l'option appropriée est sélectionnée.

+9

Cela semble fonctionner. Bien sûr, maintenant je dois en savoir assez sur les styles et écrire un chapitre dessus, donc je peux mieux expliquer comment utiliser cette approche dans le livre. Je suis * donc * pas impatient de cela. :-(Merci, merci pour l'aide! – CommonsWare

+25

Content de vous aider, vos livres me sont parvenus à bout de connaissances, je suis heureux de pouvoir donner quelque chose en retour. –

Questions connexes