2015-06-11 22 views
35

Używam nowego NavigationView do tworzenia menu szuflady nawigacji z XML. Potrzebuję umieścić dzielnik między elementami menu sekcji, które przełączają się między sekcjami mojej aplikacji, a ustawieniami i pomocą znajdują się linki pomocy u dołu.Jak uzyskać dzielniki w menu NavigationView bez tytułów?

We wszystkich przykładach widziałem, widzę, w jaki sposób można to zrobić poprzez umieszczenie innego <menu> ramach <item>, ale <item> wymaga mieć atrybut android:title, więc najlepsze, co mogę zrobić, to tytuł pusty, pozostawia puste miejsce przed ustawieniami i pomaga uzyskać informację zwrotną.

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

Próbowałem różnych kombinacji <menu>, <item> i <group> znaczników, ale nie znalazłem niczego, co będzie działać. Ten przykład ma problemu stosując ostatnią pozycję w poprzedniej grupie jako tytuł Grupa:

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

Tam po prostu musi być łatwy sposób to zrobić używając tylko opis menu XML. Google ma to samo zachowanie w ich Material design spec.

Settings and support

EDIT:

Kolejny blisko próba:

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

To nie pozostawia przestrzeń między przedmiotów powyżej i poniżej dzielnika, ale jest jeszcze przestrzeń na szczycie teraz. Również, android:checkableBehavior="single" zachowuje się dziwnie. Przedmioty nie są wybierane przy pierwszym wybraniu, a elementy nie są odznaczane, gdy inne zostaną wybrane.

+0

Sprawdź poniżej swoją odpowiedź, która działa idealnie dla Ciebie. [NaviagtionMenuList Divider] (http://stackoverflow.com/questions/30916946/android-navigationview-menu-group-divider/40259846#40259846) –

+0

Powinieneś sprawdzić swoją odpowiedź, masz niezakończone tagi i nie działa –

Odpowiedz

98

Od: NavigationView: how to insert divider without subgroup?

To wygląda po prostu trzeba dać group tagi unikalne identyfikatory.

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

Jako odpowiedź mówi:

[NavigationView] stworzy dzielnika każdym razem id grupa jest zmieniana

+8

Dobre znalezisko ! Nie mogłem znaleźć tutaj pytania z moimi poszukiwaniami. Dodanie identyfikatorów do grup załatwiło sprawę. –

+0

Dziękuję bardzo, @Kenny Worden !!!! –

+0

Ale myślę, że nie możemy mieć 'android: checkableBehavior =" single "' zastosować w różnych grupach. Westchnienie – user3175580

2

To jest dokładne rozwiązanie za pytanie tutaj.

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