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.