早期的android sdk中没有可用的侧滑菜单的支持,所以很多时候都是使用的SlidingMenu。使用的侧滑菜单应用越来越多,以至于已经成为了app页面导航的标准,google也意识到侧滑菜单的必要,于是在后期版本中加入了对侧滑菜单的支持:DrawerLayout 。这个功能组件内置于版本支持拓展包v4中,开发者可以非常便捷地使用。
效果图:
使用方法:
首先保证自己工程里导入了v4包
然后使用v4包中的DrawerLayout 作为视图文件的根布局:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
</android.support.v4.widget.DrawerLayout>
DrawerLayout中只能存在2个子View,DrawerLayout默认第一个View是底层视图,第二个是侧滑视图。开发者文档上推荐底层视图需要使用FrameLayout,但是实际测试发现其他布局也可以。我就使用了常规的RelativeLayout;第二个视图侧滑视图一般是一个ListView,为了符合自定义各种布局效果,使用了其他布局也可以,这里使用了LinearLayout:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF" >
</RelativeLayout>
<LinearLayout
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:orientation="vertical"
android:background="#111">
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
侧滑视图中有个重要的属性android:layout_gravity,可以为start、end、left、right,标示了菜单从哪个方向滑出来。
这样就可以运行看一下了,内置了侧滑手势的处理,不需要添加任何java代码。
你可以在侧滑的视图布局中添加更多的布局来实现各种自定义效果,增加事件监听器等方式都一样。
如果你需要在代码中控制侧滑视图的打开关闭,可以使用下面的2个方法:
DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer);
drawer.openDrawer(Gravity.LEFT); //从左边打开
drawer.closeDrawer(Gravity.LEFT); //从左边关闭
如果需要监听侧滑菜单的打开关闭事件,需要添加一个行为监听器:
drawer.setDrawerListener(new DrawerListener(){
@Override
public void onDrawerOpened(View drawerView) {// 打开drawer
}
@Override
public void onDrawerClosed(View drawerView) {// 关闭drawer
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {// drawer滑动的回调
}
@Override
public void onDrawerStateChanged(int newState) {// drawer状态改变的回调
}
});
DrawerLayout作为google官方的侧滑组件,使用非常方便,google也推荐使用DrawerLayout作为页面导航组件。为开发者提供了许多编辑的编辑接口,用户可以自由地自定义它来实现各种效果。