Navigationsansicht und benutzerdefiniertes Layout


81

Ich verwende die Designs Support Libraries NavigationViewwie folgt:

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

Und ich habe dieses Menü eingestellt:

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

Gibt es eine Möglichkeit, die Navigationsansicht mit einem Layout anstelle eines Menüs zu verwenden?


Können Sie nicht einfach die Header-Ansicht nav_header verwenden?
— RuAware

Ich möchte die Kopfzeile und ich möchte anstelle des Menüs ein benutzerdefiniertes Layout verwenden
— Panayiotis Irakleous

Antworten:


184

So habe ich es gelöst und perfekt funktioniert:

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

Perfekter Weg! Ich war es leid, das zu finden, aber dumm von mir, warum habe ich nicht versucht, die schließenden Tags zu erweitern! Schön! Ich brauchte tatsächlich eine erweiterbare ListView!
— Sud007

2
Zeichnet dies die Kopfansicht unter die Statusleiste?
— marilion91

Ja sicher, da es immer noch Teil der Navigationsansicht ist.
— Hamzeh Soboh

Dies ist die einzige XML-basierte Arbeitslösung, die ich bisher gefunden habe. +1
— michnovka

Könnte jemand einen Referenzlink für diese Lösung geben? weil ich das versucht habe, aber Probleme bekommen habe.
— Realpranav

34

Ja, Sie können ... Wie ich es getan habe ... Nehmen Sie einfach Ihr benutzerdefiniertes Layout in die Navigationsansicht

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

Der obige Code Arbeit für mich ... Aber vergessen Sie nicht , entfernen app:menuaus NavigationView. Andernfalls überlappt es Ihre benutzerdefinierte Ansicht der Menüelemente.


1
Die Listenansicht wird über der Kopfansicht angezeigt. Wie kann man es unter die Kopfansicht setzen?
— Sudheesh Mohan

Wenn ListViewSie eine untergeordnete Ansicht verwenden, können Sie die NavigationView'sKopfzeile nicht verwenden . Wenn Sie also verwenden ListView, können Sie headerView hinzufügen ListView.
— Moinkhan

1
Als ich in der Listenansicht die Kopfansicht hinzufügte, verschwand die Kopfansicht. Code <ListView App: headerLayout = "@ layout / nav_header" android: entry = "@ array / test" android: layout_width = "match_parent" android: layout_height = "match_parent" />
— Sudheesh Mohan

Bro derzeit Design Support-Bibliothek ist fehlerhaft ... Sie können es tun. Wenn Sie Headerview hinzufügen möchten, müssen Sie es aufblasen und programmgesteuert in Listview hinzufügen.
— Moinkhan

7
Was bietet die Navigationsansicht mehr, wenn wir ListView darin mit einer benutzerdefinierten Zeile verwenden, wie wir es bisher tun?
— Davideas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.