说到DrawerLayout,其实并不陌生,查看源码可以发现他是android .support.v4下面的一个组件,那么他究竟是干什么用的呢,说白了就是一个google官方提供的侧滑组件,相信吃瓜落的你已经使用过SlidingMen自定义组件,那么他和SlidingMenu类似,这下你应该懂了吧。
还不懂的看下图:
好了,那接下来就说说这玩意怎么用了。
其实他的用法还是比较简单的,就像是LinearLayout,RelativeLayout一样使用,然后在内部在定义两部分的布局:1)主界面布局 2)侧滑布局(这块内容包含两块区域:左侧侧滑内容和右侧侧滑内容,但这两块根据需要可以只布局其中一个,或者两个)。其实就这么简单
<?xml version="1.0" encoding="utf-8"?>
<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_width="match_parent"
android:layout_height="match_parent">
<!--主页面显示的内容布局-->
<RelativeLayoutandroid:id="@+id/content_layout"android:layout_width="match_parent" android:layout_height="match_parent"> </RelativeLayout>
<!--左侧显示的内容-->
<RelativeLayout
android:id="@+id/left_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="#ff00ff">
</RelativeLayout>
<!--右侧显示的内容-->
<RelativeLayout
android:id="@+id/right_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#ffff00">
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
然后运行起来就可以左右侧滑了,是不是非常简单!!!
其实细心的你会发现,在DrawerLayout中进行主页面和侧滑布局的时候,我是先写的主页面布局
<!--主页面显示的内容布局-->
<RelativeLayout
android:id="@+id/content_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
然后再写的侧滑布局(左,右)
好了那么问题来了
我可不可以按照如下的顺序来写呢:左侧侧滑,主页面,右侧侧滑
于是笔者带着这种思路去修改,从左到右写,反正我在左侧的侧滑布局中设置了layout_gravity="left" 那他就应该知道,我没设置的就是主页面。
那么笔者告诉你:
这样写是可以的,而且运行后也是可以滑动的,但是出现的现象是这样的:
1)左侧滑出来的view想要滑回去,就只能点击右边部分没内容的区域,滑动是不起作用的
2)左侧如果是导航菜单,想要更换主页面的内容,也是无法更换的
这样是不是非常的影响用户体验呢?
官方的说法是:
1、DrawerLayout最好为界面的根布局,否则可能会出现触摸事件被屏蔽的问题;
2、主界面布局要放在侧滑布局前面,因为XML顺序意味着按Z序排序(层叠排序)
3、侧滑菜单必须设置layout_gravity属性
至于其他的DrawerLayout设置Listener等,就不在这里废话了,没什么好说的
其实说了一大堆,上面的这三条是比较重要的,笔者曾经为此付出过时间代价。