最近接手一个新项目需要用到侧滑功能,虽然以前也接入过,但是都是开发人员自定义的控件,接入起来特别麻烦,幸好google出了drawerlayou控件,现在就可以轻松实现侧滑功能了,下面直接撸代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:fitsSystemWindows="true"
android:orientation="vertical">
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff">
<FrameLayout
android:id="@+id/ly_content"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!--android:layout_gravity="left"-->
<RelativeLayout
android:layout_width="275dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:clickable="true"
>
<LinearLayout
android:layout_width="275dp"
android:layout_height="match_parent"
android:background="#f5f5f5"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_marginLeft="15dp"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@mipmap/ic_get_food"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="**"
android:textSize="18sp"
android:textColor="@color/font_130b27"/>
<TextView
android:id="@+id/tv_user_nick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="**"
android:layout_marginTop="10dp"
android:textSize="15sp"
android:textColor="@color/font_ffcc24"/>
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/tv_user_dept"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="产品研发"
android:textSize="16sp"
android:textColor="@color/font_130b27"
android:layout_marginLeft="15dp"
android:layout_marginTop="50dp"/>
<TextView
android:id="@+id/tv_user_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="chaoge@baofu.com"
android:textSize="16sp"
android:textColor="@color/font_130b27"
android:layout_marginLeft="15dp"
android:layout_marginTop="20dp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_out"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:layout_alignParentBottom="true"
android:layout_marginBottom="30dp"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/ic_out"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:layout_gravity="center_horizontal"
android:textColor="@color/font_130b27"
android:layout_marginTop="10dp"
android:text="退出"/>
</LinearLayout>
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
以上就是布局文件就是drawerlayout的布局了,drawerlayout布局下面主要包含了两个模块,上面的是主界面要显示的模块,直接写了一个FrameLayout,用fragment实现主界面,然后直接塞进去。
下面的内容就是侧滑菜单中要显示的内容了。需要注意的一点就是侧滑布局的跟布局需要添加android:layout_gravity="left"或者android:layout_gravity="right"来决定布局是从左边还是右边滑出
在写的过程中可能需要判断drawerlayout的是否滑出,google也给了相应的方法
在写的过程中可能需要判断drawerlayout的是否滑出,google也给了相应的方法
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(View drawerView) {
}
@Override
public void onDrawerClosed(View drawerView) {
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
里面包含对侧滑打开,关闭,以及滑动状态的监听
接下来就是设置测试菜单是否需要打开了
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); //设置侧滑可以滑动
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);//禁止侧滑滑动
这会侧滑功能基本上已经可以完美实现了,不过在后来测试的过程中遇见一个穿透点击事件
处理方案:
在侧滑布局的根布局添加
android:clickable="true"
以上就侧滑功能的基本实现了