抽屉式导航栏官方推出好久了,之前也使用过,但对这些类都是懵懵懂懂的。今天认真看了下文档才把这些类搞清楚。个人对MD的设计风格还是很喜欢的。
DrawerLayout
DrawerLayout是一个窗口内容的顶层容器(像LinearLayout、FrameLayout这些一样),它的用处在于允许从窗口的一个或两个垂直边缘拉出交互式“抽屉”视图(这个抽屉指的就是滑出的View,说抽屉还挺形象的啊)。也就是说要实现滑出View的话,你得使用这个ViewGroup作为顶层布局。
抽屉定位和布局使用android:layout_gravity属性来控制,该属性决定抽屉视图从哪个方向滑出:左侧或右侧(基于支持布局方向的平台版本,例如有些地区阅读方向是从右往左,要考虑这些情况可以统一使用start而不是left)。每个垂直边缘只能有一个抽屉视图。如果布局在窗口的每个垂直边缘配置多个抽屉视图,则会在运行时抛出异常。
- 要使用DrawerLayout,需要将主内容视图作为第一个子节点(因为在xml文件中布局将在z轴上进行覆盖,后面的布局覆盖前面的,这里必须保证滑出视图在主视图之上)。
- 主内容视图宽度和高度为match_parent而且不要使用layout_gravity。主内容视图设置为匹配父视图的宽度和高度, 因为在抽屉式导航栏处于隐藏状态时, 它和平时UI界面没什么两样。
- 在主内容视图之后添加抽屉视图(滑出的View),并设置layout_gravity,这决定视图从那边滑出,如果不设置将直接显示而不是滑出。抽屉通常使用match_parent为高度,宽度为固定值(宽度不应超过 320dp,从而用户始终可以看到部分主内容)。
根据“Android设计指南”,任何位于左侧(基于阅读顺序)的抽屉应当是对应用程序中内容的导航,而位于右侧的抽屉是对当前内容所执行的操作。
使用示例
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 主内容视图,通常由抽屉中的item点击来决定使用相应的fragment进行填充 -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- 抽屉视图,可以为任意视图 -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity=