android - tutorial - navigation view inflate menu
¿Cómo obtener divisores en el menú NavigationView sin títulos? (2)
Estoy usando la nueva NavigationView
para crear mi menú de cajón de navegación desde XML. Necesito colocar un divisor entre los elementos del menú de la sección, que cambian entre las secciones de mi aplicación, y la configuración y los enlaces de ayuda y soporte en la parte inferior.
En todos los ejemplos que he visto, veo cómo se puede hacer esto poniendo otro <menu>
dentro de un <item>
, pero el <item>
requiere tener el atributo android:title
, así que lo mejor que puedo hacer es hacer el título en blanco, que deja un espacio vacío antes de la configuración y ayuda y comentarios.
<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>
He intentado varias combinaciones de etiquetas <menu>
, <item>
y <group>
, pero no he encontrado nada que funcione. Esto, por ejemplo, tiene el problema de usar el último elemento del grupo anterior como título del grupo:
<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>
Simplemente tiene que haber una manera fácil de hacerlo usando solo la descripción XML del menú. Google tiene este mismo comportamiento en sus especificaciones de diseño de materiales .
EDITAR:
Sin embargo, otro intento cercano:
<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>
Esto no deja espacio entre los elementos arriba y debajo del divisor, pero todavía hay espacio en la parte superior ahora. Además, el android:checkableBehavior="single"
comporta de manera extraña. Los elementos no se seleccionan cuando se seleccionan por primera vez y los elementos no se eliminan una vez que se seleccionan otros.
De: NavigationView: ¿cómo insertar divisor sin subgrupo?
Parece que solo necesita dar a sus etiquetas de group
identificaciones únicas.
<group android:id="@+id/my_id">
<!-- Divider will appear above this item -->
<item ... />
</group>
Como dice la respuesta:
[NavigationView] creará un divisor cada vez que se cambie la identificación del grupo
Esta es la solución exacta para su pregunta aquí.
<?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>