web-dev-qa-db-ja.com

NavigationViewとカスタムレイアウト

次のようなデザインサポートライブラリ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を使用する方法はありますか?
前もって感謝します

74

ここに私がそれを解決し、完璧に働いた方法があります:

<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>
171
Hamzeh Soboh

はい、できます....私がやったように...カスタムレイアウトを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>

上記のコードは私のために動作します...しかしNavigationViewからapp:menuを削除することを忘れないでください。そうしないと、メニュー項目のカスタムビューと重なります。

32
Moinkhan