J'utilise le nouveau NavigationView
pour créer mon menu de tiroir de navigation à partir de XML. Je dois placer un séparateur entre les éléments de menu de section, qui basculent entre les sections de mon application, et les paramètres et les liens d'aide et de support en bas.
Dans tous les exemples que j'ai vus, je vois comment cela peut être fait en mettant un autre <menu>
dans un <item>
, mais le <item>
nécessite d'avoir le Android:title
attribut, donc le mieux que je puisse faire est de rendre le titre vide, ce qui laisse un espace vide avant les paramètres et l'aide et les commentaires.
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<group Android:checkableBehavior="single">
<item
Android:id="@+id/nav_section_1"
Android:icon="@drawable/ic_dashboard"
Android:title="@string/section_1"
Android:checked="true" /> <!-- default selection -->
<item
Android:id="@+id/nav_section_2"
Android:icon="@drawable/ic_dashboard"
Android:title="@string/section_2" />
<item
Android:id="@+id/nav_section_3"
Android:icon="@drawable/ic_dashboard"
Android:title="@string/section_3" />
</group>
<item Android:title="@null"> <!-- I don't want a title or space here! -->
<menu>
<item
Android:id="@+id/nav_settings"
Android:icon="@drawable/ic_settings"
Android:title="@string/settings" />
<item
Android:id="@+id/nav_help_feedback"
Android:icon="@drawable/ic_help"
Android:title="@string/help_feedback" />
</menu>
</item>
</menu>
J'ai essayé différentes combinaisons de <menu>
, <item>
et <group>
tags, mais je n'ai rien trouvé qui fonctionne. Cela a par exemple le problème d'utiliser le dernier élément du groupe précédent comme titre de groupe:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<group Android:checkableBehavior="single">
<item
Android:id="@+id/nav_section_1"
Android:icon="@drawable/ic_dashboard"
Android:title="@string/section_1"
Android:checked="true" /> <!-- default selection -->
<item
Android:id="@+id/nav_section_2"
Android:icon="@drawable/ic_dashboard"
Android:title="@string/section_2" />
<item
Android:id="@+id/nav_section_3"
Android:icon="@drawable/ic_dashboard"
Android:title="@string/section_3" />
</group>
<group> <!-- This puts @string/section_3 as the group title! -->
<menu>
<item
Android:id="@+id/nav_settings"
Android:icon="@drawable/ic_settings"
Android:title="@string/settings" />
<item
Android:id="@+id/nav_help_feedback"
Android:icon="@drawable/ic_help"
Android:title="@string/help_feedback" />
</menu>
</item>
</menu>
Il doit simplement y avoir un moyen facile de le faire en utilisant uniquement la description XML du menu. Google a ce comportement dans leurs Material design spec .
MODIFIER:
Encore une autre tentative rapprochée:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:title="@null"> <!-- Still a space here though! -->
<menu>
<group Android:checkableBehavior="single"> <!-- And this checkable behavior behaves strangely for some reason -->
<item
Android:id="@+id/nav_section_1"
Android:icon="@drawable/ic_dashboard"
Android:title="@string/section_1"
Android:checked="true" /> <!-- default selection -->
<item
Android:id="@+id/nav_section_2"
Android:icon="@drawable/ic_dashboard"
Android:title="@string/section_2" />
<item
Android:id="@+id/nav_section_3"
Android:icon="@drawable/ic_dashboard"
Android:title="@string/section_3" />
</group>
</menu>
</item>
<group> <!-- Finally, no space or title here! -->
<item
Android:id="@+id/nav_settings"
Android:icon="@drawable/ic_settings"
Android:title="@string/settings" />
<item
Android:id="@+id/nav_help_feedback"
Android:icon="@drawable/ic_help"
Android:title="@string/help_feedback" />
</item>
</menu>
Cela ne laisse aucun espace entre les éléments au-dessus et en dessous du séparateur, mais il y a toujours de l'espace en haut maintenant. Également Android:checkableBehavior="single"
se comporte étrangement. Les éléments ne sont pas sélectionnés lorsqu'ils sont sélectionnés la première fois et les éléments ne sont pas désélectionnés une fois que d'autres sont sélectionnés.
De: NavigationView: comment insérer un séparateur sans sous-groupe?
Il semble que vous ayez juste besoin de donner à vos balises group
des ID uniques.
<group Android:id="@+id/my_id">
<!-- Divider will appear above this item -->
<item ... />
</group>
Comme le dit la réponse:
[NavigationView] créera un séparateur chaque fois que l'ID de groupe est changé
C'est la solution exacte pour votre question ici.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
<group
Android:id="@+id/menu_top"
Android:checkableBehavior="single">
<item Android:title="Switch Team">
<menu>
<item
Android:id="@+id/team"
Android:title=""
app:actionLayout="@layout/layout_spinner_for_drawer"/>
</menu>
</item>
</group>
<group
Android:id="@+id/menu_bottom"
Android:checkableBehavior="single">
<item
Android:id="@+id/nav_home"
Android:icon="@drawable/home"
Android:title="Home" />
<item
Android:id="@+id/nav_share"
Android:icon="@drawable/sharebox"
Android:title="Sharebox" />
<item
Android:id="@+id/nav_recognize"
Android:icon="@drawable/recognize"
Android:title="Recognize" />
<item
Android:id="@+id/nav_contact_us"
Android:icon="@drawable/contactus"
Android:title="Contact Us" />
<item
Android:id="@+id/nav_logout"
Android:icon="@drawable/signout"
Android:title="Logout" />
</group>
</menu>