NavigationView和自定义布局


82

我正在使用这样的设计支持库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与布局而不是菜单一起使用吗?


您不仅可以使用标题视图nav_header文件吗?
RuAware

我想要标题视图,而不是菜单使用自定义布局
Panayiotis Irakleous

Answers:


185

这是我解决问题的方法,并且效果很好:

<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
这会在状态栏上绘制标题视图吗?
marilion91'9

可以肯定,因为它仍然是NavigationView的一部分。
Hamzeh Soboh,2015年

这是我到目前为止发现的唯一基于XML的工作解决方案。+1
michnovka

谁能为此解决方案提供参考链接?因为我尝试过但遇到问题。
realpranav

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:menuNavigationView。否则,它将与您的自定义视图重叠在菜单项上。


1
列表视图显示在标题视图上方。如何把它放在headerview下面?
Sudheesh Mohan 2015年

如果uListView用作子视图,则不能使用NavigationView'sHeader。因此,如果您正在使用ListView,则可以在中添加headerView ListView
Moinkhan 2015年

1
当我在Listview中添加headerview时,headerview消失了。代码<ListView app:headerLayout =“ @ layout / nav_header” android:entries =“ @ array / test” android:layout_width =“ match_parent” android:layout_height =“ match_parent” />
Sudheesh Mohan

兄弟目前的设计支持库有问题……可以做到。如果你想添加headerview你有它充气和列表视图中添加编程..
Moinkhan

7
如果到现在为止我们一直在使用ListView以及自定义行,那么NavigationView会提供什么呢?
Davideas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.