2015-06-11 10 views
35

Sto utilizzando il nuovo NavigationView per creare il menu del cassetto di navigazione da XML. Devo posizionare un divisore tra le voci del menu della sezione, che cambiano tra le sezioni della mia app e le impostazioni e aiutare i collegamenti di supporto & nella parte inferiore.Come ottenere divisori nel menu di NavigationView senza titoli?

In tutti gli esempi che ho visto, vedo come questo possa essere fatto mettendo un altro <menu> all'interno di un <item>, ma la <item> richiede di avere l'attributo android:title, quindi la cosa migliore che posso fare è rendere il titolo vuoto, che lascia uno spazio vuoto prima delle impostazioni e aiuta il feedback di &.

<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> 

Ho provato varie combinazioni di <menu>, <item> e <group> tag, ma non ho trovato nulla che funziona. Questo per esempio presenta il problema di utilizzare l'ultimo elemento del gruppo precedente, come il titolo del gruppo:

<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> 

ci deve solo essere un modo semplice per fare questo utilizzando solo la descrizione del menu XML. Google ha questo stesso comportamento nel loro Material design spec.

Settings and support

EDIT:

Ancora un altro primo tentativo:

<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> 

Questo non lascia spazio tra gli elementi sopra e sotto il divisore, ma c'è ancora lo spazio in alto adesso. Inoltre, lo android:checkableBehavior="single" si comporta in modo strano. Gli elementi non sono selezionati quando vengono selezionati per la prima volta e gli elementi non sono deselezionati una volta che altri sono stati selezionati.

+0

Dai un'occhiata alla mia risposta che funziona perfettamente per te. [NaviagtionMenuList Divider] (http://stackoverflow.com/questions/30916946/android-navigationview-menu-group-divider/40259846#40259846) –

+0

Dovresti controllare la risposta, hai tag non completati e non funziona –

risposta

98

Da: NavigationView: how to insert divider without subgroup?

Sembra che non vi resta che dare i vostri group tag univoci di identificazione di.

<group android:id="@+id/my_id"> 
    <!-- Divider will appear above this item --> 
    <item ... /> 
</group> 

Come la risposta dice:

[NavigationView] creerà un divisore ogni volta l'ID del gruppo viene modificato

+8

Buona ricerca ! Non ho trovato una domanda qui con la mia ricerca. L'aggiunta di ID ai gruppi ha fatto il trucco. –

+0

Grazie mille, @Kenny Worden !!!! –

+0

Ma suppongo che non possiamo avere 'android: checkableBehavior =" single "' si applica ai gruppi. Sigh – user3175580

2

Questa è la soluzione esatta per la tua domanda qui.

<?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>