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由于其 ...
随机推荐
- Hadoop Yarn 安装
环境:Linux, 8G 内存.60G 硬盘 , Hadoop 2.2.0 为了构建基于Yarn体系的Spark集群.先要安装Hadoop集群,为了以后查阅方便记录了我本次安装的详细步骤. 事前准备 ...
- Android TCP/IP 扫盲教程
TCP/IP 是因特网的通信协议. 通信协议是对计算机必须遵守的规则的描写叙述.仅仅有遵守这些规则.计算机之间才干进行通信. 浏览器和server都在使用 TCP/IP 因特网浏览器和因特网serve ...
- SharePoint Framework 简介
作者:陈希章 发表于 2017年12月25日 前言 通过前面几篇文章,我相信大家对于SharePoint Online的开发有了更加全面的认识,上一篇 介绍的SharePoint Add-in的开发, ...
- A 01 如何理解会计中的借和贷
敲黑板,上结论: 借:钱花到哪里去了? 贷:钱从哪里搞来的? 举个例子 某公司用银行存款200 000元购入一辆自用小汽车(自用小汽车属于固定资产), 会计里面如何计呢? 答案: 借:固定资产200 ...
- ASP.NET Core 指定环境发布(hosting environment)
ASP.NET Core 应用程序发布命令: dotnet publish [<PROJECT>] [-f|--framework] [-r|--runtime] [-o|--output ...
- 手把手教你用vue-cli搭建vue项目
手把手教你用vue-cli搭建vue项目 本篇主要是利用vue-cli来搭建vue项目,其中前提是node和npm已经安装好,文章结尾将会简单提到一个简单的例子.使用vue-cli搭建项目最开始我也是 ...
- Data Base mongodb driver2.5环境注意事项
mongodb driver2.5环境注意事项 一.问题: 如果使用vs2012开发就会报这个错误: 未能加载文件或程序集“System.Runtime.InteropServices.Runtime ...
- iOS 多线程 简单学习NSThread NSOperation GCD
1:首先简单介绍什么叫线程 可并发执行的,拥有最小系统资源,共享进程资源的基本调度单位. 共用堆,自有栈(官方资料说明iOS主线程栈大小为1M,其它线程为512K). 并发执行进度不可控,对非原子操作 ...
- Cookie的简单用法
ASP.NET初学者使用cookie的时候会感觉很陌生,在学习的过程中掌握cookie对象的增删改查非常有必要,,下面是我学习的时候经常用到的这些方法 写入和读取Cookie都需要用户Respone对 ...
- 关于PLC
学电气的一方面是单片机,一方面是PLC,,,,常常看到说选择比努力更重要,,单片机都很熟悉了,我就来介绍一下PLC..... 然后呢我先吹吹牛,,,目的是让大家相信我介绍的PLC绝对是亲身体验.... ...