这里只对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 的使用及问题小结的更多相关文章

  1. Android使用ToolBar+DrawerLayout+NavigationView实现侧滑抽屉效果

    学会使用DrawerLayout 学会使用NavigationView 学会使用ToolBar+DrawerLayout+NavigationView实现侧滑抽屉效果 学会实现Toolbar在顶部以及 ...

  2. Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)

    在新的Android Support Library里面,新增了CoordinatorLayout, AppBarLayout等. 实现的效果: 向下滚动RecylerView,Tab会被隐藏,向上滚 ...

  3. 【转】Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用

    Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用 分类: Android UI ...

  4. [Android] Android利用Coordinatorlayout+AppbarLayout实现折叠式布局

    折叠式布局在App中相当常见,给人一种科技感,充满良好的用户体验. 本文就以两个简单的例子,来举例说明基本折叠式布局: 首先需要在app/build.gradle下添加如下依赖: compile 'c ...

  5. CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout使用

    本文介绍Design Support Library中CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout的使用. 先列出了Design S ...

  6. android ToolBar与DrawerLayout笔记

    通过Android Studio 生成的Nagvition DrawerLayout Activity 自带的布局中的NagvitionView会覆盖ToolBar直接通到statusBar. 但是自 ...

  7. Android Material Design之 NavigationView侧滑界面自定义 随笔

    一.侧滑界面Menu自定义: 在menu文件夹下新建activity_main_drawer.xml文件,自定义标题和icon: <?xml version="1.0" en ...

  8. 【Android - MD】之NavigationView的使用

    NavigationView是Android 5.0新特性--Material Design中的一个布局控件,可以结合DrawerLayout使用,让侧滑菜单变得更加美观(可以添加头部布局). Nav ...

  9. android CoordinatorLayout使用

    一.CoordinatorLayout有什么作用 CoordinatorLayout作为“super-powered FrameLayout”基本实现两个功能: 1.作为顶层布局 2.调度协调子布局 ...

  10. Toolbar+DrawerLayout+NavigationView的使用

    http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0303/2522.html(转载) Toolbar介绍 ActionBar由于其 ...

随机推荐

  1. JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)(转)

    转载自 http://www.cnblogs.com/xdp-gacl/p/3734395.html 一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的serve ...

  2. DotNetCore跨平台~xUnit生成xml报告

    在CI/CD流行至极的今天,你的项目没有自动化测试绝对是不可以接受的,在进行自动化部署和持续集成时,我们的dotnet core项目也是可以实现自动化的,之前说过gitlab,jenkins对持续集成 ...

  3. 开发指南专题六:JEECG微云高速开发平台代码生成

    开发指南专题六:JEECG微云高速开发平台代码生 1.1. 代码生成扫描路径配置 用代码生成器生成代码后.须要进行相关配置配置,扫描注入control.service.entity等; 具体操作过程例 ...

  4. 一句话搞定webmap(一)——轻地图组件

    摘要: 遥想当年.在APP中增加LBS元素相当困难:要刻苦学习java,要刻苦学习iOS开发,要刻苦学习javascript-- 而现在.要制作一张地图真是越来越easy了!居然仅仅须要一句话.就能够 ...

  5. ArtDialog V6的简单使用

    artDialog v6 -- 经典的网页对话框组件,内外皆用心雕琢. 兼容性 測试通过:IE6~IE11.Chrome.Firefox.Safari.Opera 授权协议 免费,且开源.基于LGPL ...

  6. [NOIP复习]第三章:动态规划

    一.背包问题 最基础的一类动规问题.相似之处在于给n个物品或无穷多物品或不同种类的物品,每种物品仅仅有一个或若干个,给一个背包装入这些物品,要求在不超出背包容量的范围内,使得获得的价值或占用体积尽可能 ...

  7. Js动态操作表格

    HTML <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" co ...

  8. redis远程连接问题(安全模式问题)

    我在windows上远程连接linux上的redis(我虚拟机上的)遇到了问题,我是在windows上php代码中的调用redis接口来远程连接的,代码中ping()的时候报错. 服务器端我确定了ip ...

  9. gunicorn geventworker 解析

    在前面的文章曾介绍过gunicorn的syncworker,本文介绍其中一种asyncworker:GeventWorker.类图如下:   可见GeventWorker重载了init_process ...

  10. 工作随笔——ember框架去除url上的#号

    因为工作原因,接触到了一套非常好的前端框架--ember. ember框架高度封装,学习曲线比较陡峭. ember对于url更新的配置在config/environment.js >> l ...