with tutorial studio fragments crear android android-menu divider navigationview

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>