Chế độ xem điều hướng và bố cục tùy chỉnh


82

Tôi đang sử dụng các Thư viện hỗ trợ thiết kế NavigationViewnhư sau:

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

Và tôi đã đặt menu này:

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

Có cách nào để sử dụng NavigationView với bố cục thay vì menu không?


bạn có thể không chỉ sử dụng dạng xem tiêu đề, tệp nav_header?
RuAware

tôi muốn chế độ xem tiêu đề và tôi muốn thay vì menu để sử dụng bố cục tùy chỉnh
Panayiotis Irakleous

Câu trả lời:


185

Đây là cách tôi đã giải quyết nó và hoạt động hoàn hảo:

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

Cách hoàn hảo! Tôi đã rất mệt mỏi khi tìm thấy điều này nhưng thật ngu ngốc tại sao tôi không thử mở rộng các thẻ đóng! Tốt nhất! Tôi thực sự cần một ListView có thể giải thích được!
sud007

2
điều này có vẽ tiêu đề xem vào thanh trạng thái không?
marilion91

Chắc chắn là có, vì nó vẫn là một phần của NavigationView.
Hamzeh Soboh

đây là giải pháp làm việc dựa trên XML duy nhất mà tôi đã tìm thấy cho đến nay. +1
michnovka

Bất cứ ai có thể cung cấp liên kết tham khảo cho giải pháp này? bởi vì tôi đã thử điều này nhưng gặp sự cố.
realpranav

34

Có Bạn có thể .... Như tôi đã làm ... Chỉ cần đưa bố cục tùy chỉnh của bạn vào bên trong 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>

Đoạn mã trên phù hợp với tôi ... Nhưng đừng quên xóa app:menukhỏi NavigationView. Nếu không, nó sẽ chồng chéo chế độ xem tùy chỉnh của bạn trên các mục menu.


1
Chế độ xem danh sách xuất hiện trên chế độ xem tiêu đề. Làm thế nào để đặt nó bên dưới lần xem tiêu đề?
Sudheesh Mohan

Nếu bạn đang sử dụng ListViewlàm dạng xem con thì bạn không thể sử dụng NavigationView'sHeader. Vì vậy, nếu bạn đang sử dụng, ListViewbạn có thể thêm headerView vào ListView.
Moinkhan

1
Khi tôi thêm lần xem tiêu đề trong Listview, lần xem tiêu đề đã biến mất. mã <ListView ứng dụng: headerLayout = "@ layout / nav_header" android: mục = "@ mảng / test" android: layout_width = "match_parent" android: layout_height = "match_parent" />
Sudheesh Mohan

Bro hiện tại Thư viện hỗ trợ thiết kế đang bị lỗi ... Bạn có thể làm được. Nếu bạn muốn thêm lần xem tiêu đề, bạn đã thổi phồng nó và thêm vào chế độ xem danh sách theo chương trình ..
Moinkhan

7
Điều hướng NavigationView cung cấp nhiều hơn nếu sau đó chúng ta sử dụng ListView bên trong nó với một hàng tùy chỉnh như chúng ta đang làm cho đến nay?
Davideas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.