NavigationView 및 사용자 지정 레이아웃


82

다음 NavigationView과 같은 Designs Support Libraries를 사용하고 있습니다 .

<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 2015-06-03

내가 헤더보기를 원하고 나는 사용자 정의 레이아웃을 사용하는 대신 메뉴의 원하는
Panayiotis Irakleous

답변:


186

내가 그것을 해결하고 완벽하게 작동하는 방법은 다음과 같습니다.

<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
이것은 상태 표시 줄에서 headerview를 그립니다?
marilion91 2015 년

예, 여전히 NavigationView의 일부이기 때문입니다.
Hamzeh Soboh 2015 년

이것은 내가 지금까지 찾은 유일한 XML 기반 작업 솔루션입니다. +1
michnovka 15.10.06

누구든지이 솔루션에 대한 참조 링크를 제공 할 수 있습니까? 시도했지만 문제가 발생했기 때문입니다.
realpranav 2015

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
목록보기가 헤더보기 위에 나타납니다. headerview 아래에 두는 방법?
서드 히쉬 모한

유 사용하는 경우 ListView아이보기로 당신은 사용할 수 없습니다 NavigationView's헤더. 그래서 만약 당신이 사용하는 ListView당신이 headerView을 추가 할 수 있습니다 ListView.
Moinkhan

1
Listview에 headerview를 추가했을 때 headerview가 사라졌습니다. 코드 <ListView에 응용 프로그램 : headerLayout = "@ 레이아웃 / nav_header"안드로이드 "배열 / 테스트 @"항목 = 안드로이드 : layout_width = "match_parent"안드로이드 : layout_height = "match_parent"/>
서드 히쉬 모한

Bro는 현재 디자인 지원 라이브러리에 버그가 있습니다. 할 수 있습니다. 당신이 headerview을 추가 할 경우에 당신은 ... 그것을 팽창 및 프로그래밍 방식으로 목록보기를 추가해야
Moinkhan

7
지금까지 지금까지했던 것처럼 사용자 지정 행과 함께 내부에서 ListView를 사용하면 NavigationView가 더 많은 것을 제공 할 수 있습니까?
Davideas 2015-06-24
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.