DrawerLayout实现侧滑布局问题总结
来源:互联网 发布:韩国真实社会现状 知乎 编辑:程序博客网 时间:2024/06/05 22:50
本片是对DrawerLayout使用的一个详细解析,也是对开发中遇到问题的一些总结。
DrawerLayout是SupportLibrary中一个支持侧滑效果的控件,开发中主要是跟NavigationView+Toolbar配合来实现侧滑菜单,具体看效果。
这个效果模板即可实现,这里简单做下使用讲解,重点不在这里。
布局:
<?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" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:openDrawer="start"> //第一个ViewGroup是内容区域 <include layout="@layout/app_bar_main" android:layout_width="match_parent" android:layout_height="match_parent"/> //第一个ViewGroup是侧滑区域 <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer"/></android.support.v4.widget.DrawerLayout>
1:第一个ViewGroup是内容区域,必须放在第一位,后面的ViewGroup才是侧滑区域。
2: android:layout_gravity=”start” 表示侧滑方向,start是从左向右滑动,end是从右向左滑动。
3: app:headerLayout=”@layout/nav_header_main”自定义NavigationView头部布局
4: app:menu=”@menu/activity_main_drawer” 定义菜单item
activity_main_drawer:
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/nav_camera" android:icon="@drawable/ic_menu_camera" android:title="Import"/> <item android:id="@+id/nav_gallery" android:icon="@drawable/ic_menu_gallery" android:title="Gallery"/> <item android:id="@+id/nav_slideshow" android:icon="@drawable/ic_menu_slideshow" android:title="Slideshow"/> <item android:id="@+id/nav_manage" android:icon="@drawable/ic_menu_manage" android:title="Tools"/> </group> <item android:title="Communicate"> <menu> <item android:id="@+id/nav_share" android:icon="@drawable/ic_menu_share" android:title="Share"/> <item android:id="@+id/nav_send" android:icon="@drawable/ic_menu_send" android:title="Send"/> </menu> </item></menu>
NavigationView实现OnNavigationItemSelectedListener点击监听
@SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_camera) { // Handle the camera action } else if (id == R.id.nav_gallery) { } else if (id == R.id.nav_slideshow) { } else if (id == R.id.nav_manage) { } else if (id == R.id.nav_share) { } else if (id == R.id.nav_send) { } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; }
问题1:如何除掉侧滑的时候附带的背景阴影?
有图可见,侧滑的时候改变了背景透明度。
解决: idDrawerLayout.setScrimColor(Color.TRANSPARENT);设置当抽屉打开时,未被抽屉遮住部分的颜色。
问题2:如何防止点击侧滑的菜单的时候内容区域响应点击
看效果
在左菜单区域点击,内容区域响应点击事件,这肯定是不行的。当然这针对的是自定义布局,如果采用NavigationView搭配是没有问题的,关键还是看需求咯。
解决:
//侧滑点击监听 idDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() { @Override public void onDrawerSlide(View drawerView, float slideOffset) { } @Override public void onDrawerOpened(View drawerView) { drawerView.setClickable(true); } @Override public void onDrawerClosed(View drawerView) { } @Override public void onDrawerStateChanged(int newState) { } });
在侧滑监听里监听onDrawerOpened方法,设置 drawerView.setClickable(true);即可。
问题3:如何将DrawerLayout背景色延伸至状态栏
解决方案:
将状态栏设为透明
根据StatusBar的值为Toolbar设置相应的paddingTop
为作为根布局的DrawerLayout设置setFitsSystemWindows(true)
为作为根布局的Drawerlayout设置setClipToPadding(false)
private void handleStatusBar() { if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){ WindowManager.LayoutParams manager=getWindow().getAttributes(); manager.flags= (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS|manager.flags); drawer.setFitsSystemWindows(true); drawer.setClipToPadding(false); } }
问题4:如何主动开启或隐藏drawer
上述都是由drawer自己通过滑动或者点击来控制开启或者关闭。
主动开启视图
主动关闭视图
问题5:如何取消抽屉的滑动效果
锁定模式有四种:
LOCK_MODE_LOCKED_CLOSED:关闭抽屉的滑动操作并将抽屉收起
LOCK_MODE_LOCKED_OPEN:关闭抽屉的滑动操作并将抽屉打开
LOCK_MODE_UNDEFINED:将锁定模式重新设置到默认状态
LOCK_MODE_UNLOCKED:解锁对抽屉的滑动操作锁定
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.RIGHT)
即可锁定手势滑动,只能主动去开启或者关闭drawer。
- DrawerLayout实现侧滑布局问题总结
- DrawerLayout实现侧滑布局问题总结
- DrawerLayout来实现侧滑,遇到问题总结
- Android侧滑菜单DrawerLayout(抽屉布局)实现
- Demo2实现侧滑菜单:DrawerLayout布局初涉
- Android DrawerLayout+NavigationView布局实现左右两边侧滑菜单
- Android侧滑菜单DrawerLayout(抽屉布局)实现
- DrawerLayout实现侧滑
- DrawerLayout实现侧滑
- DrawerLayout实现侧滑
- DrawerLayout 实现侧滑
- Drawerlayout实现侧滑
- ToolBar+DrawerLayout实现左右双布局侧滑和动画返回控制显示抽屉布局
- 侧滑的布局SlidingPaneLayout和DrawerLayout
- 使用DrawerLayout实现侧滑菜单(两种写法都实现一样的布局)完美!
- DrawerLayout的布局及实现
- drawerlayout实现侧滑效果
- DrawerLayout实现侧滑菜单
- 数组 — 方法
- CSS与JS学习笔记
- armv7a中的SMC指令应用
- Eclipse的Debug快捷键
- 斐讯K2从第三方固件刷回原厂固件
- DrawerLayout实现侧滑布局问题总结
- Find All Duplicates in an Array问题及解法
- ubuntu16.04开机后进入grub rescue>终端模式的解决办法
- C++多重继承和基类地址
- Webview控件
- PhotonServer游戏服务器端(三)
- Akka 实践(一)Akka基础
- linux下将该目录下及子目录下所有的文件转成UTF-8的格式
- Til the Cows Come Home POJ