在实现开发要求中,有需要会使用抽屉式布局,类似于QQ5.0的侧滑菜单,实现的方式有很多种,可以自定义控件,也可以使用第三方开源库。

同样的谷歌也推出了自己的侧滑组件——DrawLayout,使用方式也很简单,配合着toolbar有着不一样的滑动效果,所以推荐大家使用。

如下是效果图,是不是更具交互性,更加酷炫?

**首先是XML**

drawlayout分为两部分:侧滑界面和内容界面,所以drawlayout中应该有两个布局,在侧滑的布局中设置属性:android:layout_gravity="start",就可以实现侧滑了。

下面是XML文件,仅作参考:

android:layout_width="match_parent"android:layout_height="match_parent"xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/dl_content">

android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/cl_content">

android:layout_width="match_parent"android:layout_height="wrap_content"app:layout_scrollFlags="scroll|enterAlways"android:id="@+id/ft_host">

android:id="@+id/nv_left_content"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="start"app:itemIconTint="#333"app:itemTextColor="#333"app:headerLayout="@layout/left_home_top"app:menu="@menu/left_home_botton"

/>

**代码部分**

接下来就是让toolbar和drawlayout关联起来。这部分也很简单。让toolbar代替actionbar。这里有个注意点,不能让Activity继承Activity,而是继承于它的子类AppCompatActivity,否则是找不到setSupportActionBar(toolbar)这个方法的,当我们关联起来之后,就可以使用ActionBarDrawerToggle了,它实现了

drawlayout的滑动监听,谷歌也将它和Material Design风格的动画特效关联起来了。

当我们实现了这一步时,让我们看看效果:

可以发现,按钮被挡住了,如果你用过印象笔记的客户端,你会发现,它的侧滑按钮也被挡住了,所以一点都不酷炫了!!!!!

但是作为一个追求完美无bug的安卓开发人员是绝对不允许这样的事的。

**重写onDrawerSlide**

通过重写onDrawerSlide方法重新获取滑动范围,让他贴着内容界面划出。代码也很简单这里贴出主要代码:

private voidinitView() {

setSupportActionBar(toolbar);

drawerToggle=new ActionBarDrawerToggle(this,drawerLayout,toolbar,

R.string.open,R.string.close){

@Overridepublic void onDrawerSlide(View drawerView, floatslideOffset) {

WindowManager windowManager=(WindowManager) getSystemService(

getApplicationContext().WINDOW_SERVICE);

Display display=windowManager.getDefaultDisplay();

linearLayout.layout(navigationView.getRight(),0,

display.getWidth()+navigationView.getRight(),

display.getHeight());super.onDrawerSlide(drawerView, slideOffset);

}

};

drawerLayout.setDrawerListener(drawerToggle);

getSupportActionBar().setHomeButtonEnabled(true);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

}

@Overridepublic voidonPostCreate(Bundle savedInstanceState) {super.onPostCreate(savedInstanceState);

drawerToggle.syncState();

}

@Overridepublic voidonConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);

drawerToggle.onConfigurationChanged(newConfig);

}

最终的效果图就是开篇的效果,是不是很酷炫,用户体验也比传统的侧滑好的多了。最后多谢浏览,我会继续加油哒!

原文:http://www.cnblogs.com/lovelyYakir/p/5793251.html

android抽屉风格,Android开发实战之拥有Material Design风格的抽屉式布局相关推荐

  1. GitHub上受欢迎的Android UI Library-项目开发实战篇:带各类框架链接地址详细解说及使用方法

    这是我列举的下列所有框架github地址:https : //github.com/opendigg/awesome-github-android-ui 抽屉菜单类的框架 MaterialDrawer ...

  2. Android 2.3应用开发实战

    Android 2.3应用开发实战全面介绍Android OS操作环境,包括SDK 2.3版最新内容 丰富的范例程序详解Android应用开发,便于读者快速掌握 每一章的主题都安排进阶学习,满足不同读 ...

  3. Android经典项目案例开发实战宝典

    Android经典项目案例开发实战宝典 Android 系统并不自带文件管理器,但是很多情况下,我们有诸如从SD中打开文件的需要,怎么办呢?相信大家都比较习惯Windows 下操作文件和文件夹的方式, ...

  4. 开发Google Material Design风格的WPF程序

    原文:开发Google Material Design风格的WPF程序 今天在网上看到了一个Material Design风格的WPF皮肤,看上去还是挺不错的 这个项目是开源的,感兴趣的朋友可以下载试 ...

  5. 开启Fluter基础之旅二-------Future再论、常用组件、Material Design风格组件学习

    Future再论: 这里在继续往下学习之前,先来看一下Dart语言关于Event-Queue和Microtask Queue需要注意的一个小点,这个在之前https://www.cnblogs.com ...

  6. Material Design风格登录注册

    本文实现了以下功能 完整的代码和样例托管在Github 当接口锁定时,防止后退按钮显示在登录Activity 上. 自定义 ProgressDialog来显示加载的状态. 符合材料设计规范. 悬浮标签 ...

  7. 开启Fluter基础之旅三-------Material Design风格组件、Cupertino风格组件、Flutter页面布局篇...

    Material Design风格组件: 继续接着上一次https://www.cnblogs.com/webor2006/p/12545701.html的Material Design进行学习. A ...

  8. 12个Material Design风格控件的使用

    项目在GitHub上的地址: https://github.com/Hebin320/MaterialDesignUse CSDN上的下载地址 http://download.csdn.net/det ...

  9. Flutter 入门学习(五)— Material Design风格组件

    文章目录 1. 概述 2. App结构和导航组件 2.1 MaterialApp(应用组件) 2.1.1 设置主页 2.1.2 路由处理 2.1.3 自定义主题 2.2 Scaffold(脚手架组件) ...

最新文章

  1. 一起学习android图片四舍五入图片集资源 (28)
  2. python的装饰器迭代器与生成器_python3 装饰器、列表生成器、迭代器、内置方法详解等(第四周)...
  3. 我的小型网站搜索分词中遇到的问题
  4. RocketMq案例,生产者,消费者,消息订阅
  5. vue3中ref、reactive、shallowRef、 shallowReactive、toRaw、unref、toRef、toRefs、customRef使用与区别
  6. 滴滴是如何搭建起PB级数据中台的?
  7. Android官方开发文档Training系列课程中文版:手势处理之滚动动画及Scroller
  8. hdoj 1013 Digital Roots
  9. 【今日CS 视觉论文速览】Wed, 12 Dec 2018
  10. s3c2440第一个裸奔程序——跑马灯(转)
  11. django pdf转html5,python – 在Django站点中将HTML转换为PDF
  12. idea创建Maven项目后启动报404
  13. 安卓psp模拟器哪个好_更完美!安卓PSP模拟器PPSSPP 0.9.9发布
  14. 徒步50公里,35岁的联想可以,你也可以
  15. 没考驾照的恭喜了!上海打响第一枪!
  16. JAVA验证 手机、邮箱、电话、QQ 格式是否正确
  17. 【无标题】【全开源】bat编辑器4.5
  18. (C语言)用‘*’打印平行四边形
  19. 【汽车总线技术】CAN和CAN FD总线故障诊断
  20. H3C交换机路由器的策略路由配置

热门文章

  1. 读书笔记——数据库系统概论
  2. 公共方法之运算符,len,del,max,min,range,enumerate
  3. dbhelp mysql c_C++写的一个MYSQL控制台(3)
  4. 为什么input中的maxlength属性失效了
  5. Linux下Git免输密码解决方式
  6. Visual studio 2012 创建web service
  7. 读取XML文件报 - Content is not allowed in prolog
  8. python 速成学堂_Python 与数据科学入门
  9. 学微电子要学计算机哪种语言,微电子学与计算机,模板.doc
  10. Python中报错Invalid return character or leading space in header: Cookie