NavigationView та нестандартний макет


83

Я використовую бібліотеки підтримки дизайну NavigationViewтаким чином:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:fitsSystemWindows="true">

    <!-- put your main layout here -->
    <include layout="@layout/drawer_main_layout"/>

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header"
        app:menu="@menu/drawer_view"/>

</android.support.v4.widget.DrawerLayout>

І я встановив це меню:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/ic_dashboard"
            android:title="Home" />
        <item
            android:id="@+id/nav_messages"
            android:icon="@drawable/ic_event"
            android:title="Messages" />
        <item
            android:id="@+id/nav_friends"
            android:icon="@drawable/ic_headset"
            android:title="Friends" />
        <item
            android:id="@+id/nav_discussion"
            android:icon="@drawable/ic_forum"
            android:title="Discussion" />
    </group>

    <item android:title="Sub items">
        <menu>
            <item
                android:icon="@drawable/ic_dashboard"
                android:title="Sub item 1" />
            <item
                android:icon="@drawable/ic_forum"
                android:title="Sub item 2" />
        </menu>
    </item>

</menu>

Чи є спосіб використовувати NavigationView з макетом, а не з меню?


Ви можете не просто використовувати заголовок, файл nav_header?
RuAware

я хочу подання заголовка і хочу замість меню використовувати власний макет
Panayiotis Irakleous

Відповіді:


187

Ось як я це вирішив і чудово працював:

<android.support.design.widget.NavigationView
    android:id="@+id/navigation"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include layout="@layout/nav_header" />

        <ListView
            android:id="@+id/lst_menu_items"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    </LinearLayout>
</android.support.design.widget.NavigationView>

Ідеальний спосіб! Я втомився знаходити це, але дурний з мене, чому я не спробував розширити закриваючі теги! Хороший! Мені потрібен був пояснюваний ListView насправді!
sud007

2
це малює заголовок під рядком стану?
marilion91

Так точно, оскільки він все ще є частиною NavigationView.
Хамзе Собох

це єдине робоче рішення на основі XML, яке я знайшов на сьогодні. +1
міхнівка

Хтось може дати посилання на посилання для цього рішення? тому що я спробував це, але отримую проблеми.
realpranav

34

Так, ви можете .... Як і я ... Просто візьміть свій власний макет всередині NavigationView

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.NavigationView
        android:id="@+id/navView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start">

        <ListView
            android:entries="@array/test"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

Наведений вище код працює для мене ... Але не забудьте видалити app:menuз NavigationView. В іншому випадку він перекриватиме ваш власний вигляд пунктів меню.


1
Подання списку відображається над заголовком. Як розмістити це під заголовком?
Sudheesh Mohan

Якщо ви використовуєте ListViewяк дочірній вигляд, тоді ви не можете використовувати NavigationView'sзаголовок. Отже, якщо ви використовуєте, ListViewви можете додати headerView в ListView.
Мойнхан

1
Коли я додав заголовок у Listview, заголовок зник. код <ListView app: headerLayout = "@ layout / nav_header" android: entries = "@ array / test" android: layout_width = "match_parent" android: layout_height = "match_parent" />
Судхіш Мохан

На даний момент, бібліотека підтримки дизайну не працює ... Ви можете це зробити. Якщо ви хочете додати заголовок, ви надуєте його і додасте в списку програмно ..
Мойнкхан

7
Що дає NavigationView більше, якщо тоді ми використовуємо ListView всередині нього зі спеціальним рядком, як це робилося досі?
Давідеас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.