Android CoordinatorLayout、AppBarLayout、DrawerLayout、NavigationView 的使用及问题小结
这里只对Material Design中这几种组件使用的重要部分以及容易出现问题的地方进行汇总(遇坑请直接看最后常见问题部分),详细用法请自行查阅官方文档
一、CoordinatorLayout
介绍:CoordinatorLayout主要用来作为顶层布局来协调各子布局
使用:CoordinatorLayout包含一个Child和一个Dependency,最后还需要一个最重要的Behavior。
1)Child
是指要执行动作的CoordinatorLayout
的子View
;
2)Dependency
是指Child
依赖的View
;
3)简单来讲,就是如果Dependency
这个View发生了变化,那么Child
这个View
就要相应发生变化;
4)Child
发生变化的具体执行的代码都是放在Behavior
这个类里面。
5)Behavior最基本的用法就是在Child这个View的XML文件中定义一个app:layout_behavior="@string/appbar_scrolling_view_behavior"表示跟随Dependency一起滑动
自定义Behavior:
1)首先,定义一个类,继承CoordinatorLayout.Behavior<T>
,其中,泛型参数T是我们要执行动作的View
类,也就是Child
。然后就是去实现Behavior
的两个方法:
/**
* 判断child的布局是否依赖dependency
*/
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, T child, View dependency) {
boolean rs;
//根据逻辑判断rs的取值,例如:rs =dependency instanceof CustomDependency
//返回false表示child不依赖dependency,ture表示依赖
return rs;
} /**
* 当dependency发生改变时(位置、宽高等),执行这个函数
* 返回true表示child的位置或者是宽高要发生改变,否则就返回false
*每次dependency位置发生变化,都会执行onDependentViewChanged方法
*/
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, T child, View dependency) {
//child要执行的具体动作
return true;
}
二、AppBarLayout
介绍:主要是通过AppBarLayout的五种ScrollFlags来定制可滑动VIew的手势滑动效果
使用:有两种设置ScrollFlags的方式以及五种ScrollFlags
1)通过在XML文件中定义app:layout_scrollFlags属性来设置,代码中通过
setScrollFlags(int)
方法设置
2)scroll:
·想要滚动出屏幕的view都需要设置这个值;
·在设置此flag的view之前如果有other_view没有设置此值,那么此view的设置将失效;
·其他四种flag的使用都必须与scroll配合使用。
3)enterAlways:
如果view设置了该flag,那么该view将启用quick return模式,即快速返回模式,也就是说在向下滑动中会优先滑动该view使其先显示出来
4)enterAlwaysCollapsed:
enterAlways的附加值,如果view同时设置了该flag,并设置了最小高度minHeight,在向下滑动中,会优先使该view滑动到最小高度,再滑动其他scrolling view,当其他可滑动的view滑动到边界,设置该flag的view再继续滑动显示完全
5)enterUntilCollapsed:
如果view设置了该flag,并设置了最小高度minHeight,在向上滑动过程中,会使该view只滑动出至最小高度,不会完全滑动出屏幕
6)snap:
主要是实现滑动中的一个吸附效果,要么该view全部滑动出屏幕,要么全部显示在屏幕上,不会出现只有一半显示在屏幕中的情况,类似于ViewPager的滑动效果
三、DrawerLayout与NavigationView
介绍:通过DrawerLayout与NavigationView这两个主要是侧滑及侧滑菜单的实现
使用:将DrawerLayout作为父布局,主页内容作为第一个子布局,而NavigationView作为最后一个布局
1)通常需要在NavigationView中指定一个头布局和一个菜单布局,分别为app:menu="@menu/xxx"和app:headerLayout="@layout/xxx
"
2)menu的中有group和item两个节点,区别是两个group之间会有分割线隔开表示不同组
3)NavigationView的XML中还需要设置一个android:layout_gravity="start"属性表示可以从左侧或右侧划出
常见问题:
1.在结合使用CoordinatorLayout、AppBarLayout的时候,设置了scroll_flag但无法实现沉浸式效果
原因:CoordinatorLayout的Child View为ViewPager,而ViewPager中嵌套的是Listview
解决方案:必须使用RecyclerView才可以
2.在结合使用DrawerLayout与NavigationView的时候出现无法通过左划将侧滑菜单收回的情况
原因:NavigationView没有作为最后一个子布局
解决方案:需要将主页作为首个子布局,将NavigationView作为最后一个子布局
3.在结合使用DrawerLayout与NavigationView的时候只显示侧边栏并且占满全屏
原因:没有设置NavigationView的android:layout_gravity="start"属性
解决方案:设置该属性即可,可能Android Studio没有该属性提示,需要纯手打
Android CoordinatorLayout、AppBarLayout、DrawerLayout、NavigationView 的使用及问题小结的更多相关文章
- Android使用ToolBar+DrawerLayout+NavigationView实现侧滑抽屉效果
学会使用DrawerLayout 学会使用NavigationView 学会使用ToolBar+DrawerLayout+NavigationView实现侧滑抽屉效果 学会实现Toolbar在顶部以及 ...
- Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)
在新的Android Support Library里面,新增了CoordinatorLayout, AppBarLayout等. 实现的效果: 向下滚动RecylerView,Tab会被隐藏,向上滚 ...
- 【转】Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用
Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用 分类: Android UI ...
- [Android] Android利用Coordinatorlayout+AppbarLayout实现折叠式布局
折叠式布局在App中相当常见,给人一种科技感,充满良好的用户体验. 本文就以两个简单的例子,来举例说明基本折叠式布局: 首先需要在app/build.gradle下添加如下依赖: compile 'c ...
- CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout使用
本文介绍Design Support Library中CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout的使用. 先列出了Design S ...
- android ToolBar与DrawerLayout笔记
通过Android Studio 生成的Nagvition DrawerLayout Activity 自带的布局中的NagvitionView会覆盖ToolBar直接通到statusBar. 但是自 ...
- Android Material Design之 NavigationView侧滑界面自定义 随笔
一.侧滑界面Menu自定义: 在menu文件夹下新建activity_main_drawer.xml文件,自定义标题和icon: <?xml version="1.0" en ...
- 【Android - MD】之NavigationView的使用
NavigationView是Android 5.0新特性--Material Design中的一个布局控件,可以结合DrawerLayout使用,让侧滑菜单变得更加美观(可以添加头部布局). Nav ...
- android CoordinatorLayout使用
一.CoordinatorLayout有什么作用 CoordinatorLayout作为“super-powered FrameLayout”基本实现两个功能: 1.作为顶层布局 2.调度协调子布局 ...
- Toolbar+DrawerLayout+NavigationView的使用
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0303/2522.html(转载) Toolbar介绍 ActionBar由于其 ...
随机推荐
- idea/eclipse下Maven工程集成web服务(tomcat、jetty)
idea/eclipse下Maven工程集成web服务 转载请注明出处:http://www.cnblogs.com/funnyzpc/p/8093554.html 应用服务器最常用的一般有这哥仨: ...
- JavaWeb核心技术学习 - 1.从JDBC说起
作者:java1to3链接:http://www.cnblogs.com/java1to3/著作权归作者所有.未经作者本人同意,禁止一切转载.商业或非商业转载请联系作者获得授权并请注明出处. ・JDB ...
- LDA主题模型学习笔记5:C源代码理解
1.说明 本文对LDA原始论文的作者所提供的C代码中LDA的主要逻辑部分做凝视,原代码可在这里下载到:https://github.com/Blei-Lab/lda-c 这份代码实现论文<Lat ...
- SQL运行时间
打开SQL运行时间统计 set timing on; 查询是否有运行时间较长的SQL存在 select a.sid, b.sql_text from v$session a, v$sqlare ...
- 解决 PclZip 中文乱码问题
在使用 Pclzip 时出现无法压缩/解压文件的现象,追踪错误信息发现无法打开文件/文件夹.可是文件夹权限正确,打印文件路径之后发现是乱码. 出现这个问题的解决办法是windows下zip内的 ...
- Oracle之PLSQL
PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用.PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)它是Ora ...
- laravel会话驱动扩展—连接自定义会话管理系统
laravel 版本:5.3.* 用laravel开发公司信息系统过程中,由于业务或安全问题的考虑,会有一些特殊的用户会话管理方面的需求,如多个子系统会话统一管理或A系统业务操作导致B系统中某些在线用 ...
- 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯云容器服务团队 源码为 k8s v1.6.1 版本,github 上对应的 commit id 为 b0b7a323cc5a4a ...
- 知名互联网公司校招 Java 开发岗面试知识点解析
天之道,损有余而补不足,是故虚胜实,不足胜有余. 本文作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几 ...
- java实现播放mp3功能
1.首先引入jlayer.jar <!-- https://mvnrepository.com/artifact/javazoom/jlayer --> <dependency> ...