Google a introduit le NavigationView
dans la bibliothèque de support de conception version 22.2.0 avec lequel vous pouvez créer un tiroir très facilement à l'aide d'une ressource de menu.
Comment créer une ligne de séparation simple entre deux éléments? Le regroupement des éléments n'a pas fonctionné. La création d'une section de sous-éléments crée une ligne de séparation, mais elle nécessite un titre, ce que je ne veux pas.
Toute aide serait appréciée.
android
navigation-drawer
android-support-library
android-design-library
navigationview
Longi
la source
la source
Réponses:
Tout ce que vous avez à faire est de définir un
group
avec un identifiant unique , j'ai vérifié l'implémentation si le groupe a des identifiants différents, cela créera un diviseur.Exemple de menu, création du séparateur:
la source
setChecked
semble fonctionner au niveau du groupe. Si vous sélectionnez un article dans le groupe A, puis ouvrez à nouveau le tiroir et sélectionnez l'article dans le groupe B, les deux articles resteront en surbrillance. Peut-être que Google corrigera ce problème dans la prochaine version, mais pour l'instant, c'est l'inconvénient d'utiliser plusieurs groupes avec NavigationView.android:checkableBehavior="none"
pour votre deuxième groupe (ce sont des actions, pas de navigation, je suppose)group
il sera compilé et exécuté mais les diviseurs sont masqués.créer un tiroir_item_bg.xml pouvant être dessiné comme celui-ci,
et ajoutez-le à NavigationView en tant qu'application: itemBackground = "@ drawable / tiroir_item_bg"
et c'est reparti...
la source
navMenuView.addItemDecoration(new DividerItemDecoration(NavigationViewActivity.this, DividerItemDecoration.VERTICAL));
pour une bordure d'objet parfaiteAjout simple de DeviderItemDecoration:
Cela ressemble à ceci:
la source
addItemDecoration
ligne à 1px?Vous pouvez facilement ajouter des séparateurs en définissant l'arrière-plan de l'élément de menu via XML en utilisant
app:itemBackground
Et utilisez LayerDrawable comme arrière-plan. Il préserve la superposition d'ondulation de conception matérielle pour les clics.
Le résultat:
la source
Je pense avoir une solution encore meilleure pour le problème de plusieurs éléments vérifiés. En utilisant ma façon, vous n'avez pas à vous soucier de changer votre code lors de l'ajout de nouvelles sections à votre menu. Mon menu ressemble à la solution acceptée écrite par Jared, à la différence d'utiliser andoid: checkableBehavior = " all " sur les groupes:
Le checkableBehavior de 'all' permet de cocher / décocher des éléments uniques à volonté, indépendamment du groupe auquel ils appartiennent. Il vous suffit de stocker le dernier menuitem vérifié. Le code java ressemble à ceci:
la source
Faire différents groupes comme la réponse de Nilesh crée un séparateur entre les deux mais crée le problème de deux éléments cochés dans le tiroir de navigation.
Une façon simple de gérer cela était:
la source
android:checkableBehavior="none"
Je ne sais pas si cela est résolu
API 26 (Android 8)
ou si c'était possible tout le temps. Je suis toujours un noob dans la programmation Android. Cependant, j'ai ajouté des groupes de parents comme ci-dessous. Test sur téléphone physique Android 6,nav_g1
ounav_g2
désélectionnera d'autres éléments.Java
code aux auditeursCode de menu
Remarques
android:checkableBehavior="single"
pour groupe parent est nécessaire pour que le problème de plusieurs éléments de menu sélectionnés dans cette réponse (mentionné dans les commentaires de hungryghost) ne se produise pasEt voici la capture d'écran
la source
Je voulais des séparateurs au-dessus du premier élément et après le dernier élément. En utilisant la solution @Nilesh, j'ai dû ajouter des éléments de menu factices et définir enabled sur false, ce qui me semblait vraiment sale. Et si je veux faire d'autres choses sympas dans mon menu?
J'ai remarqué que NavigationView étend FrameLayout afin que vous puissiez y mettre votre propre contenu comme vous le feriez pour un FrameLayout. J'ai ensuite défini un menu xml vide pour qu'il ne montre que ma mise en page personnalisée. Je comprends que cela va probablement à l'encontre de la voie que Google veut que nous prenions, mais si vous voulez un menu vraiment personnalisé, c'est un moyen facile de le faire.
Voici le style
Et dessinable
Et le menu
Éditer:
Au lieu de Buttons, vous pouvez utiliser TextView avec drawable qui imite l'apparence des éléments de menu d'origine:
la source
Le crédit devrait aller à Zorawar pour la solution, Désolé pour la duplication de la réponse, mais n'a pas pu ajouter autant de texte formaté dans un commentaire.
La solution de Zorawar fonctionne, le code pourrait être amélioré en tant que tel:
la source
La réponse de Nileh est juste, sauf qu'elle a un défaut de double vérification.
Donc en utilisant
avec un identifiant unique résoudra le problème
la source
Si vous souhaitez ajouter un diviseur de manière dynamique , vous pouvez simplement ajouter un sous-menu vide comme celui-ci:
cela ajoutera un diviseur.
assurez-vous simplement de passer le bon index lors de l'utilisation
menu.getItem(int index)
la source
En plus des réponses précédentes, si vous voulez des séparateurs décoratifs mais que vous ne voulez pas créer plusieurs groupes en raison de problèmes de «comportement vérifiable», vous pouvez attribuer le même identifiant de groupe à tous vos groupes.
Exemple:
la source
Si la réponse sélectionnée ne fonctionne pas pour vous, vous pouvez essayer de l'ajouter à
onCreateOptionsMenu
en plus de donner l'ID de groupe unique:la source