当前位置: 首页 > 编程日记 > 正文

Android5.0之CoordinatorLayout的使用

CoordinatorLayout,中文译作协调者布局,光听这名字你可能很难判断出协调者布局有什么特点,那么我们来看看下面一张图片:

由于CSDN对图片大小的要求,我只能录制一个快速播放的动画,请大家见谅。但是显示效果大家应该都看到了,就是当在页面的上方有一个图片,当底部的控件向上滑动时,上方的图片慢慢的折叠起来,最终变成一个Toolbar,显示在页面的最上方。就这样一个简单的效果,如果自己用动画写也不是不可以,但是太麻烦,我们今天就来看看Google提供的CoordinatorLayout控件,只需要在布局文件中简单折腾两下,Java代码几乎不用写任何东西,就能实现这样的效果。

OK,那就开始吧。

1.整体概述

1.添加依赖

很明显这些都是design包中的,因此我们需要添加依赖:

[java] view plaincopy print?在CODE上查看代码片派生到我的代码片
  1. compile 'com.android.support:design:23.1.1'  

2.页面分析

使用CoordinatorLayout时,我们的页面整体上分为两部分,一部分是上面折叠的东东,还有一部分是下面的滚动控件。上面折叠的这一部分我们需要写在一个AppBarLayout中,下面的滚动控件你有两种选择,要么使用NestedScrollView,要么使用RecyclerView。其他的滚动控件都是不可以实现的哦。

2.具体实现方式

1.AppBarLayout中的写法

整个头部我们都写在AppBarLayout中,但是要实现折叠效果还需要CollapsingToolbarLayout布局,事实上,我们在AppBarLayout中放一个CollapsingToolbarLayout,头部的ImageView和Toolbar都写在CollapsingToolbarLayout中,一个简单的示例如下:

[java] view plaincopy print?在CODE上查看代码片派生到我的代码片
  1. <android.support.design.widget.AppBarLayout
  2. android:layout_width="match_parent"  
  3. android:layout_height="200dp">  
  4. <android.support.design.widget.CollapsingToolbarLayout
  5. android:layout_width="match_parent"  
  6. android:layout_height="200dp"  
  7. app:contentScrim="@color/colorPrimary"  
  8. app:layout_scrollFlags="scroll|enterAlwaysCollapsed|exitUntilCollapsed">  
  9. <ImageView
  10. android:layout_width="match_parent"  
  11. android:layout_height="match_parent"  
  12. android:scaleType="centerCrop"  
  13. android:src="@drawable/p1"/>  
  14. <android.support.v7.widget.Toolbar
  15. android:id="@+id/tool_bar"  
  16. android:layout_width="match_parent"  
  17. android:layout_height="?attr/actionBarSize"></android.support.v7.widget.Toolbar>  
  18. </android.support.design.widget.CollapsingToolbarLayout>
  19. </android.support.design.widget.AppBarLayout>

博客开始图片头部的显示效果就是这几行代码实现的。那么这里有几个属性我需要介绍一下:

app:contentScrim="@color/colorPrimary"表示当ImageView折叠后Toolbar的颜色,这里的颜色我们不可以直接在Toolbar中设置,因为Toolbar一开始是透明的,只有当ImageView折叠到Toolbar的高度时Toolbar才变为蓝色的。

app:layout_scrollFlags是一个非常重要的属性,它里边的取值主要有五种,下面我分别来解释:

1.scroll 表示CollapsingToolbarLayout可以滚动(不设置的话头部的ImageView将不能折叠)
        2.enterAlways 表示底部的滚动控件只要向下滚动,头部就显示出来
        3.enterAlwaysCollapsed 表示当底部滚动控件滚动见顶时,头部显示出来
        4.exitUntilCollapsed 表示头部折叠到最小高度时(Toolbar的高度),就不再折叠
        5.snap 表示在滑动过程中如果停止滑动,则头部会就近折叠(要么恢复原状,要么折叠成一个Toolbar)

OK,大家看博客开始时的gif图,当图片折叠时,其实是图片的顶部一直在慢慢的隐藏,底部并没有动,那么如果你想要修改这个效果,可以使用下面的属性:

app:layout_collapseMode="parallax"表示ImageView的折叠和CollapsingToolbarLayout的折叠不同步,那么这个不同步到底是怎样一个不同步法呢?还有另外一个参数来设置不同步的参数,如下:

app:layout_collapseParallaxMultiplier="0.5"表示视觉乘数,该数值的取值为0~1,数值越大,视觉差越大(如果这里的值为0,则在头部折叠的过程中,ImageView的顶部在慢慢隐藏,底部不动,如果这里的值为1,ImageView的顶部不懂,底部慢慢隐藏,如果这里的取值为0~1之间,则在折叠的过程中,ImageView的顶部和底部都会隐藏,但是头部和底部隐藏的快慢是不一样的,具体速度和视觉乘数有关)

app:layout_collapseMode这个属性还有一个取值,是pin,该属性表示当折叠完成时将该控件放在页面的头部.

OK ,配合上上面这几种属性,我们的一个较完整的头部应该是这样的:

[java] view plaincopy print?在CODE上查看代码片派生到我的代码片
  1. <android.support.design.widget.AppBarLayout
  2. android:layout_width="match_parent"  
  3. android:layout_height="200dp">  
  4. <android.support.design.widget.CollapsingToolbarLayout
  5. android:layout_width="match_parent"  
  6. android:layout_height="200dp"  
  7. app:contentScrim="@color/colorPrimary"  
  8. app:layout_scrollFlags="scroll|enterAlwaysCollapsed|exitUntilCollapsed">  
  9. <ImageView
  10. android:layout_width="match_parent"  
  11. android:layout_height="match_parent"  
  12. android:scaleType="centerCrop"  
  13. android:src="@drawable/p1"  
  14. app:layout_collapseMode="parallax"  
  15. app:layout_collapseParallaxMultiplier="0.5"/>  
  16. <android.support.v7.widget.Toolbar
  17. android:id="@+id/tool_bar"  
  18. android:layout_width="match_parent"  
  19. android:layout_height="?attr/actionBarSize"  
  20. app:layout_collapseMode="pin"></android.support.v7.widget.Toolbar>  
  21. </android.support.design.widget.CollapsingToolbarLayout>
  22. </android.support.design.widget.AppBarLayout>

另一方面,当我们在使用CollapsingToolbarLayout的时候,我们一般也不再是通过Toolbar来给页面设置title了,因为这个title能够实现的效果非常有限,那么我们怎么给页面设置Title呢?我们可以通过给CollapsingToolbarLayout设置如下属性来解决Title的问题:

app:title="MyToolBar" 表示给页面设置一个Toolbar
app:collapsedTitleGravity="right" 表示折叠之后Title显示的位置
app:expandedTitleGravity="left|bottom" 表示展开时Title显示的位置

如此设置之后我们来看一下头部显示的效果:

大家看到,当头部折叠之后,Title显示在了头部的右边。

OK,最后我们在来看一遍头部的完整代码:

[java] view plaincopy print?在CODE上查看代码片派生到我的代码片
  1. <android.support.design.widget.AppBarLayout
  2. android:layout_width="match_parent"  
  3. android:layout_height="200dp">  
  4. <android.support.design.widget.CollapsingToolbarLayout
  5. android:layout_width="match_parent"  
  6. android:layout_height="200dp"  
  7. app:title="MyToolBar"  
  8. app:collapsedTitleGravity="right"  
  9. app:expandedTitleGravity="left|bottom"  
  10. app:contentScrim="@color/colorPrimary"  
  11. app:layout_scrollFlags="scroll|enterAlwaysCollapsed|exitUntilCollapsed">  
  12. <ImageView
  13. android:layout_width="match_parent"  
  14. android:layout_height="match_parent"  
  15. android:scaleType="centerCrop"  
  16. android:src="@drawable/p1"  
  17. app:layout_collapseMode="parallax"  
  18. app:layout_collapseParallaxMultiplier="0.5"/>  
  19. <android.support.v7.widget.Toolbar
  20. android:id="@+id/tool_bar"  
  21. android:layout_width="match_parent"  
  22. android:layout_height="?attr/actionBarSize"  
  23. app:layout_collapseMode="pin"></android.support.v7.widget.Toolbar>  
  24. </android.support.design.widget.CollapsingToolbarLayout>
  25. </android.support.design.widget.AppBarLayout>


2.底部滚动控件的写法

底部控件你有两种选择,一中是直接用RecyclerView,还有一种是用NestedScrollView,这里我选用NestedScrollView来做底部的滚动控件,如下:

[java] view plaincopy print?在CODE上查看代码片派生到我的代码片
  1. <android.support.v4.widget.NestedScrollView
  2. android:layout_width="match_parent"  
  3. android:layout_height="match_parent"  
  4. app:layout_behavior="@string/appbar_scrolling_view_behavior">  
  5. <TextView
  6. android:layout_width="match_parent"  
  7. android:layout_height="match_parent"  
  8. android:text="@string/book_content"/>  
  9. </android.support.v4.widget.NestedScrollView>

整体上来说还是很简单的,TextView要能够滚动,用一个NestedScrollView包裹起来即可,但是这里多了一个app:layout_behavior属性,这个属性的值是一个字符串,追踪字符串的值发现字符串的值如下:
android.support.design.widget.AppBarLayout$ScrollingViewBehavior
这其实是一个类的地址,该类就是就是CoordinatorLayout中上下两部分配合工作的具体实现代码。

OK,整体上就是这样,最后大家要记得在使用CoordinatorLayout时一定要先将ActionBar隐藏起来,修改styles.xml文件,如下:

[java] view plaincopy print?在CODE上查看代码片派生到我的代码片
  1. <!-- Base application theme. -->
  2. <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">  
  3. <!-- Customize your theme here. -->
  4. <item name="colorPrimary">@color/colorPrimary</item>  
  5. <item name="colorPrimaryDark">@color/colorPrimaryDark</item>  
  6. <item name="colorAccent">@color/colorAccent</item>  
  7. <item name="windowActionBar">false</item>  
  8. <item name="windowNoTitle">true</item>  
  9. </style>

OK,最后,我们再来看一眼完整的代码:
[java] view plaincopy print?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <android.support.design.widget.CoordinatorLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"  
  4. xmlns:app="http://schemas.android.com/apk/res-auto"  
  5. xmlns:tools="http://schemas.android.com/tools"  
  6. android:layout_width="match_parent"  
  7. android:layout_height="match_parent"  
  8. tools:context="org.mobiletrain.coordinatorlayout.MainActivity">  
  9. <android.support.design.widget.AppBarLayout
  10. android:layout_width="match_parent"  
  11. android:layout_height="200dp">  
  12. <android.support.design.widget.CollapsingToolbarLayout
  13. android:layout_width="match_parent"  
  14. android:layout_height="200dp"  
  15. app:title="MyToolBar"  
  16. app:collapsedTitleGravity="right"  
  17. app:expandedTitleGravity="left|bottom"  
  18. app:contentScrim="@color/colorPrimary"  
  19. app:layout_scrollFlags="scroll|enterAlwaysCollapsed|exitUntilCollapsed">  
  20. <ImageView
  21. android:layout_width="match_parent"  
  22. android:layout_height="match_parent"  
  23. android:scaleType="centerCrop"  
  24. android:src="@drawable/p1"  
  25. app:layout_collapseMode="parallax"  
  26. app:layout_collapseParallaxMultiplier="0.5"/>  
  27. <android.support.v7.widget.Toolbar
  28. android:id="@+id/tool_bar"  
  29. android:layout_width="match_parent"  
  30. android:layout_height="?attr/actionBarSize"  
  31. app:layout_collapseMode="pin"></android.support.v7.widget.Toolbar>  
  32. </android.support.design.widget.CollapsingToolbarLayout>
  33. </android.support.design.widget.AppBarLayout>
  34. <android.support.v4.widget.NestedScrollView
  35. android:layout_width="match_parent"  
  36. android:layout_height="match_parent"  
  37. app:layout_behavior="@string/appbar_scrolling_view_behavior">  
  38. <TextView
  39. android:layout_width="match_parent"  
  40. android:layout_height="match_parent"  
  41. android:text="@string/book_content"/>  
  42. </android.support.v4.widget.NestedScrollView>
  43. </android.support.design.widget.CoordinatorLayout>

以上。

转载于:https://www.cnblogs.com/Free-Thinker/p/6544107.html

相关文章:

微信js sdk动态引用

一般情况下&#xff0c;微信的js-sdk只需要直接引用script即可 <script src"http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 但是有的时候&#xff0c;当我们的网页访问的环境多样的时候&#xff0c;比如APP内部&#xff0c;手机浏览器时候&…

java qq协议 c#,C# WebQQ协议群发机器人(三)

在前两篇文章中我已经给了绝大部分的WEBQQ的操作在这篇文章中不在过多的说明做法有的时候需要自己添加一些功能呢 怎么做呢&#xff0c;我这里给出一个方法。在调试webqq机器人时 我用google浏览器 的F12开发者工具来捕捉网络包&#xff0c;webqq绝大多数都是GET请求 参数用来用…

矩阵计算在计算机科学中,开发者必读:计算机科学中的线性代数(附论文)

来源&#xff1a;机器之心作者&#xff1a;Petros Drineas、Michael W. Mahoney本文共3994字&#xff0c;建议阅读6分钟。本文为你分享一篇来自普渡大学与UC Berkeley两位教授的概述论文中的线性代数知识。矩阵计算在计算机科学中占有举足轻重的地位&#xff0c;是每个开发者都…

linux blfs安装桌面,【Linux】Ubuntu14.04安装bridge-utils安装brctl

1、下载bridge-utils http://www.linuxfromscratch.org/blfs/view/svn/basicnet/bridge-utils.html2、放到/usr/src 目录下输入&#xff1a;su以root运行输入&#xff1a;cp /home/joanna/桌面/bridge-utils-1.5.tar.gz /usr/src/bridge-utils-1.5.tar.gzbridge-utils拷贝到/…

HTML5左取函数,Javascript常用方法函数收集(一)

本文中&#xff0c;收集了一些比较常用的Javascript函数&#xff0c;希望对学习JS的朋友们有所帮助。1.字符串长度截取function cutstr(str, len) {var temp,icount 0,patrn /[^\x00-\xff]/&#xff0c;strre "";for (var i 0; i < str.length; i) {if (icoun…

智能指针unique_ptr

unique_ptr的一些操作&#xff1a; int main() {unique_ptr<int> uptr(new int(10));//unique_ptr<int> uptr2(uptr);//报错//unique_ptr<int> uptr3 uptr;//报错unique_ptr<int> uptr2 std::move(uptr);//转移所有权//cout << *uptr <<…

java 设计一个geometricobject类,geometricobject类

(2) Circle 类和 Rectangle 类是 GeometricObject 类的子类,其中应实现 父类的抽象方法。 (3) 程序主方法中创建两个几何对象,一个圆和一个矩形,并用 ......创建一个元素是 GeometricObject 类型的数组: ?GeometricObject[] geo new GeometricObject[10]; 8 使用 GeometricOb…

linux 源码安装浏览器,vps+linux+安装浏览器

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器&#xff0c;帮助用户打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率三年低至5折&#xff0c;多种配置可选了解详情什么是弹性…

计算机基础及应用教案,计算机应用基础教案:数制的概念及转换(中职教育)

计算机应用基础教案&#xff1a;数制的概念及转换(中职教育) (6页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分课题&#xff1a;数制的概念及转换教学目标&#xff1a;1、了解和学握计算机…

博客园第一天,开放封闭原则

&#xff08;以下内容来自网络&#xff0c;只为加深理解&#xff09; 开放封闭原则 软件实体软件实体应该是可扩展&#xff0c;而不可修改的。 开放&#xff1a;扩展 封闭&#xff1a;修改 对扩展开放意味着在又新的需求或变化时&#xff0c;可以对代码进行扩展&#xff0c;以适…

centos6.5 php5.2,Linux中PHP安装与配置(CentOS-6.5:php-5.2.13)

1 PHP简介 PHP(PHP: Hypertext Preprocessor的缩写&#xff0c;中文名&#xff1a;“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点&#xff0c;入门门槛较低&#xff0c;易于学习&#xff0c;使用广泛&#xff0c;主要适用于Web开发领域。…

Oracle中分页查询语句

Oracle分页查询语句使我们最常用的语句之一&#xff0c;下面就为您介绍的Oracle分页查询语句的用法&#xff0c;如果您对此方面感兴趣的话&#xff0c;不妨一看。 Oracle分页查询语句基本上可以按照本文给出的格式来进行套用。Oracle分分页查询格式&#xff1a; SELECT * FROM …

大一c语言大作业课题大全,昆明理工大学大一C语言大作业题目.doc

昆明理工大学大一C语言大作业题目综合性实践排序求平均值(包括将数拆散求最大最小值)。函数ReadDat()随机产生100个存放到数组aa中00个jsSort()函数的功能是&#xff1a;进行降序排列。最后调用函数WriteDat()函数函数ReadDat()00个四位数存入数组a中&#xff0c;函数jsValue()…

1 项目里面如何打印log日志

1 首先写一个logging.py文件 import logging from conf import setting #配置文件&#xff0c;里面有日志存放路径def mylog():logger logging.getLogger()# 吸星大法# 先创造一个格式formatter logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)#…

计算机应用主要设计到哪些方面,大学计算机应用基础教案设计.doc

大学计算机应用基础教案教 师&#xff1a; 腾莉单 位&#xff1a; 数学计算机学院2009 ~ 2010学年第一讲 计算机基础知识概述【教学目的】了解计算机概念、特点、发展历程、类型应用领域等基本知识计算机基本概念和分类计算机一、计算机的概念计算机(computer)是一种能自动、高…

php点击复制按钮到我的粘贴板,JS 实现点击按钮复制内容到粘贴板 clipboard

具体实现如下:点击按钮复制内容到粘贴板body {text-align: center;}#p1 {line-height: 150px;font-size: 40px;}#source {font-size: 18px;}.wrapper {margin-top: 50px;}.btn {width: 300px;height: 120px;background-color: #4da2fd;color: #fff;font-size: 20px;text-decora…

透明代理Transparent Proxy

透明代理Transparent Proxy透明代理Transparent Proxy类似于普通代理&#xff0c;它可以使得处于局域网的主机直接访问外网。但不同之处&#xff0c;它不需要客户端进行任何设置。这样&#xff0c;客户端误以为是直接连接的外网主机&#xff0c;所以称为透明代理。由于客户端没…

C语言case次数有限制吗,用switch...case语句统计数字、空格和其他字符出现的次数...

//用switch...case语句统计数字、空格和其他字符出现的次数//转自K&R#include int main(void){int c, i, nwhite, nother, ndigit[10];nwhite nother 0;for (i 0; i < 10; i)ndigit[i] 0;while ((c getchar()) ! EOF){switch (c){case 0: case 1: case 2: case 3: …

C++——简单数据类型及布尔类型

一. 简单数据类型 数据类型描述了对象在内存存储区中占据的空间大小&#xff0c;描述了对象能够表示的数据范围 和类型。C语言中常用的数据类型有整型、实型、字符型&#xff08;这3种类型也被称之为简单数 据类型&#xff09;、数组类型、布尔类型、枚举类型、结构体类型、公用…

document.onclick在ios上不触发的解决方法与touchstart点击穿透处理

document.onclick function (e) {var e e ? e : window.event;var tar e.srcElement || e.target;if (tar.id ! "searchData") {pagesZone.style.display "none";} } 以上代码在电脑浏览器和安卓上都能触发alert事件&#xff0c;但是在iOS上却完全没有…

php广告插入代码,[教程]如何在phpcms中添加html代码广告

像上次说的那样&#xff0c;phpcms里直接生成的js文件是不能包含html代码的。本文介绍的还是利用上次所用的ads循环和phpcms自带的文本广告&#xff0c;新建一个支持html代码的模板&#xff0c;从而达到支持html广告的效果。这样设置以后&#xff0c;phpcms可以支持大部分的广告…

清华计算机学院新成立,清华AI更进一步:清华大学成立人工智能国际治理研究院...

清华AI更进一步&#xff1a;清华大学成立人工智能国际治理研究院2020-06-28 15:19:394点赞4收藏7评论集微网消息(文/小如)6月24日&#xff0c;清华大学人工智能国际治理研究院成立会议举行。图片来源&#xff1a;清华新闻网在成立会议暨第一次管委会会议上&#xff0c;清华大学…

c语言基础知识pdf下载,C语言主基础知识.pdf

C语言主基础知识泰山学院CSDN 俱乐部C 语言主要基础内容1、预处理命令 预处理的概念&#xff1a;在编译之前进行的处理。预处理命令以符号“#”开头。2 、关于#include 在编译之前将 stdio.h 文件包含入源文件中(include&#xff1a;包含) 即将stdio.h 文件中的内容复制到代码中…

ASP.NET Aries 高级开发教程:Excel导入配置之规则说明(下)

前言&#xff1a; 前面两篇都是大体介绍流程&#xff0c;有一些配置细节&#xff0c;没有细说&#xff0c;这里用一篇补上。 1、Excel配置项 起始行索引、列头跨行数&#xff1a; 对于自定义的Excel导入模板&#xff08;有时候模板是由客户提供&#xff0c;模板的规则很乱&…

php agi api,PHP agi 编写测试

部分代码来源于网络&#xff0c;经过调试后写在此&#xff1a;/etc/asterisk/phpagi.conf 配置内容&#xff1a;[phpagi]debugtrue //是否打开debug&#xff0c;一般生产环境关闭error_handlertruetempdir/var/spool/asterisk/tmp/[asmanager]server10.1.0.7port5038usernamea…

查询数据库所有表、字段、触发器等

SQL SERVER查看所有表名&#xff1a;select name from sysobjects where typeU查询表的所有字段名&#xff1a;Select name from syscolumns Where IDOBJECT_ID(表名)select * from information_schema.tablesselect * from information_schema.viewsselect * from information…

浅谈学前教育与计算机,浅谈学前教育专业计算机教学改革与实践.doc

精品文档&#xff0c;助力人生&#xff0c;欢迎关注小编&#xff01;浅谈学前教育专业计算机教学改革与实践【摘要】学前教育专业的计算机教学如果按照普通大专院校的计算机文化基础课教学模式&#xff0c;基于学生的专业及学习特点&#xff0c;培养的学生对于计算机知识的认识…

c语言指针要点,C语言指针的重点有哪些?

指针说难也不难&#xff0c;说不难吧&#xff0c;有点难理解把握几点&#xff0c;就不是很难了1、指针是变量&#xff0c;可以当成一般的变量来操作2、指针可以做减法&#xff0c;不可以做加乘除&#xff0c;减法的意思是求两个内存空间之间隔着几个字节。加乘除没有意义3、内存…

python学习随笔(七)_函数

函数 #作用:封装和复用 数学定义&#xff1a;yf(x) &#xff0c;y是x的函数&#xff0c;x是自变量。yf(x0, x1, ..., xn) Python函数 由若干语句组成的语句块、函数名称、参数列表构成&#xff0c;它是组织代码的最小单元 完成一定的功能 函数的作用…

计算机控制里ddc什么缩略语,空调自动化术语和缩略语.doc

空调自动化术语和缩略语1.6 空调自动化术语和缩略语1.6.1 术语解释Application—Specific Controller,专用控制器&#xff1a;专用控制器是意图连接一个或几个设备以便提供某种特殊功能的数字控制器。专用控制器通常有固定的控制算法和有限的参数调整。Automatic Communication…