原文:https://developer.android.google.cn/training/material/design-library.html#CreateNavDraw
创建导航抽屉(侧滑菜单)
导航抽屉是一个用于显示应用的主菜单的UI面板,平时处于隐藏状态,通过在屏幕左侧边缘滑动手指或是触摸按钮可以让它显示出来。
一个导航抽屉的布局文件主要由三个资源文件组成:
- 导航抽屉所处的Activity的布局文件(主布局)
- 可选的标头布局文件
- 菜单
在布局中添加导航抽屉
想要添加导航抽屉,首先要创建一个DrawerLayout作为布局的根视图。之后,在DrawerLayout中包含主布局以及作为导航抽屉的NavigationView。注意主布局必须放在NavigationView的前面,这是因为XML中的排放顺序会影响到视图的Z序,而导航抽屉必须要处在主布局的上方。主布局的宽高需要设置为match_parent,因为它代表的是整个UI的大小。
下面是一个示例,在DrawerLayout中包含了一个单独的主布局文件以及一个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/my_drawer_layout"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:fitsSystemWindows="true">
<include
layout="@layout/my_main_content.xml"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/my_navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/my_drawer_header"
app:menu="@menu/my_drawer_view"/>
</android.support.v4.widget.DrawerLayout>
创建标头
接下来创建一个布局文件作为导航抽屉的标头。下面的例子在LinearLayout中包含了一个TextView:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="192dp"
android:background="?attr/colorPrimaryDark"
android:padding="16dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:orientation="vertical"
android:gravity="bottom">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="My header title"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>
</LinearLayout>
你可以在布局中添加任意数量与类型的View。
创建菜单
下面是一个菜单资源的XML文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_item_1"
android:icon="@drawable/ic_my_icon"
android:title="My item 1" />
<item
android:id="@+id/nav_item_2"
android:icon="@drawable/ic_my_icon"
android:title="My item 2" />
</group>
<item android:title="Sub items">
<menu>
<item
android:id="@+id/nav_sub_1"
android:icon="@drawable/ic_my_icon"
android:title="My sub item 1" />
<item
android:id="@+id/nav_sub_2"
android:icon="@drawable/ic_my_icon"
android:title="My sub item 2" />
</menu>
</item>
</menu>
如果为group添加id,则会出现分隔线。
实现OnNavigationItemSelectedListener
最后,为NavigationView设置OnNavigationItemSelectedListener来响应菜单项单击事件。监听器中包含一个onNavigationItemSelected (MenuItem item)方法,参数item代表被单击的菜单项。