La Navigation de Tiroir: définir comme toujours ouvert sur les tablettes
Je suis en utilisant le Tiroir de Navigation modèle de la bibliothèque de prise en charge:
http://developer.android.com/training/implementing-navigation/nav-drawer.html
J'ai essayé de le définir comme toujours ouvert sur la tablette (comme un menu latéral)
Est que quelque chose de possible avec l'implémentation actuelle, ou devons-nous créer une nouvelle maquette et une nouvelle structure avec un Listview au lieu de réutiliser le même code?
InformationsquelleAutor Waza_Be | 2013-06-16
Vous devez vous connecter pour publier un commentaire.
Basé sur l'idée de gros appareils différents fichiers de mise en page, j'ai créé le projet follow.
https://github.com/jiahaoliuliu/ABSherlockSlides
Souligne:
Depuis le tiroir d'un grand appareil est toujours visible, il n'y a pas besoin d'avoir un tiroir. Au lieu de cela, un LinearLayout avec deux éléments avec le même nom sera suffisant.
Parce que nous n'avons pas le tiroir dans le fichier de layout, lorsque l'application d'essayer de trouver l'élément dans la mise en page, il retournera null. Donc, il n'y a pas besoin d'avoir un supplément de booléen pour voir la mise en page est à l'aide.
Voici l'exemple de l'utiliser comme un booléen.
res/layout-sw600dp-land
suffisant?Bâtiment sur CommonsWare de réponse, vous pouvez le faire avec un couple d'ajustements. Le premier consiste à fixer les trois lignes suivantes:
La drawerNoShadow couleur peut juste être un no-alpha de la couleur (comme 0x00000000). Que vous obtient un tiroir sans fond de superposition.
La deuxième chose que vous devez faire est d'ajuster la padding_left valeur de votre FrameLayout. Pour ce faire, vous pouvez configurer une dimension de contrôle de la ce (0dp par défaut) - dans cet exemple, R. dimen.drawerContentPadding. Vous aurez aussi besoin d'un R. dimen.drawerSize valeur qui sera la largeur de la DrawerLayout.
Cela vous permet de vérifier la paddingLeft valeur de la FrameLayout à l'appel de ces lignes.
Vous pouvez ensuite l'envelopper de toutes les fonctionnalités que vous ne souhaitez pas activer dans un
if(!isDrawerLocked)
déclaration. Il s'agira notamment:drawerLayout.setDrawerListener(drawerToggle);
getActionBar().setDisplayHomeAsUpEnabled(true);
Enfin, vous avez besoin de l'installation d'autres dispositions pour le point de vue statique d'un tiroir. Un exemple est:
La beauté est ici que vous pouvez ensuite contrôler l'ensemble de la logique par la mise en place suppléant dimen.xml les fichiers pour les appareils que vous souhaitez cibler et la seule chose que vous avez besoin de changer la valeur de drawerContentPadding et de proposer la modification de l'agencement.
REMARQUE: j'ai fini par utiliser margin_left au lieu de padding_left puisque dans la nouvelle mise en page, il superpositions le tiroir. Voir plus en profondeur le blog à propos de la technique à http://derekrwoods.com/2013/09/creating-a-static-navigation-drawer-in-android/
android:saveEnabled="false"
enDrawerLayout
balise dans deux fichiers xml. Cela désactive l'état précédent de la vue lorsque la rotation est changé, entraînant le tiroir de réinitialisation.Essayez de
setDrawerLockMode()
pour verrouiller le tiroir ouvert sur les appareils à grand écran.Comme je l'ai mentionné dans un commentaire, je ne pense pas que
DrawerLayout
est conçu pour votre scénario (même si c'est pas une mauvaise idée, à mon humble avis). Soit utiliser une mise en page différente qui héberge le mêmeListView
et le contenu, ou peut-être télécharger et de modifier votre propre copie deDrawerLayout
que, sur les appareils à grand écran, le contenu des diapositives de plus, lorsqu'il est ouvert, plutôt que de le chevauche.DrawerLayout
est conçu pour votre scénario. Soit utiliser une mise en page différente qui héberge le mêmeListView
et le contenu, ou peut-être télécharger et de modifier votre propre copie deDrawerLayout
que, sur les appareils à grand écran, le contenu des diapositives de plus, lorsqu'il est ouvert, plutôt que de le chevauche.Simplement fournir un autre fichier de mise en page pour les tablettes. De cette façon, vous pouvez enregistrer tous les comportements par défaut de
NavigationView
.Étape 1
Il suffit de créer un autre fichier de mise en page similaire à ce pour les tablettes et les placer dans
layout-w600dp-land
répertoire de ressources.Étape 2
Dans cette étape, nous allons faire assez de changements pour s'assurer l'ouverture et la fermeture des tiroirs ne fonctionne que dans les non-tablettes.
Étape 2.1
Ajoutez le contenu suivant une nouvelle valeur fichier de ressources dans les valeurs de répertoire et le nom
config_ui.xml
Qui a été pour les non-tablettes. Pour les tablettes, en créer un autre avec le même nom et le placer dans
values-w600dp-land
.Créer un nouveau champ dans la classe de l'activité le tiroir appartient à
private boolean isDrawerFixed;
et l'initialiser comme
isDrawerFixed = getResources().getBoolean(R.bool.isDrawerFixed);
.Maintenant, nous pouvons vérifier si l'appareil est déposé ou d'une tablette aussi simple que
if (isDrawerFixed){}
.L'étape 2.2
Placer le code qui définit le bouton à bascule sur le actionbar avec un
if
déclaration de ce type.Placer le code qui ferme le tiroir lorsqu'un élément est cliqué avec un autre
if
déclaration de ce type.Le résultat final va ressembler à quelque chose comme ça.
Réponses précédentes sont bonnes, mais j'ai fait face à des problèmes lors de la mise en œuvre dans le cadre de mon projet, j'ai donc envie de partager ma solution.
Tout d'abord, nous devons définir une coutume de tiroir:
Puis nous l'avons mis dans une activité de base de mise en page (sans arbitraire mises en page à partir des réponses précédentes) comme ceci:
Contenu rembourrage ici est 0dp en orientation portrait et sur 300dp dans le paysage de la fenêtre des éléments (compris empiriquement). Nous définissons dans
values
dossiers:values/dimens.xml
-values-land/dimens.xml
-Enfin, nous verrouiller le tiroir dans l'activité: