一、相关知识点介绍

AppBarLayout简介:
该控件是Design包下的一个控件,AppBarLayout就是用来装AppBar的容器,是LinearLayout的子类。而AppBar就包含我们通常所知道的ActionBar,Toolbar。
AppBarLayout要点:
功能:让子View(AppBar)可以选择他们自己的滚动行为。
注意:需要依赖CoordinatorLayout作为父容器,同时也要求一个具有可以独立滚动的兄弟节点(或兄弟节点的子view可以滚动[即RecycleView、NestedScrollView])才能发挥其功能。
CoordinatorLayout简介:
该控件是Design包下的一个控件,是组织它众多子view之间互相协作的一个ViewGroup。CoordinatorLayout 的神奇之处就在于 Behavior 对象。CoordinatorLayout使用 Behavior 对象进行通信,使得其子view之间知道了彼此的存在,一个子view的变化可以通知到另一个子view。CoordinatorLayout 所做的事情就是当成一个通信的桥梁,连接不同的view。而且design库的动态效果都依赖于该控件。

coordinatorLayout常见的用法就是:给它的一个子元素A设置一个layout_scrollFlags的属性,然后给另外一个子元素B设置一个layout_behavior=”@string/appbar_scrolling_view_behavior”的属性,这个子元素B一般是一个可以滑动的控件,比如RecyclerView、NestedScrollView等,那么当子元素B滑动的时候,子元素A就会根据其layout_scrollFlags的属性值而做出不同的改变,所以我们要为CollapsingToolbarLayout设置layout_scrollFlags属性。

CollapsingToolbarLayout介绍:

collapsingToolbarLayout一般不会单独出现在布局文件中,而是作为另一个控件CoordinatorLayout的子元素出现,CoordinatorLayout(协调布局)这个控件很强大, design库的动态效果都依赖于该控件。

常用属性
app:contentScrim:当Toolbar收缩到一定程度时的所展现的主体颜色。即Toolbar的颜色。
app:title:当titleEnable设置为true的时候,在toolbar展开的时候,显示大标题,toolbar收缩时,显示为toolbar上面的小标题。 
app:scrimAnimationDuration:该属性控制toolbar收缩时,颜色变化的动画持续时间。即颜色变为contentScrim所指定的颜色进行的动画所需要的时间 
app:collapsedTitleTextAppearance:指定toolbar收缩时,标题字体的样式。
app:collapsedTitleGravity : 指定toolbar收缩时的标题文字对齐方式。
app:expandedTitleTextAppearance : 指定toolbar展开后的标题文字字体。
app:expandedTitleGravity:指定toolbar展开时,title所在的位置。类似的还有expandedTitleMargin、collapsedTitleGravity这些属性。
app:expandedTitleMargin : 指定展开后的标题四周间距。
app:expandedTitleMarginStart/app:expandedTitleMarginTop/app:expandedTitleMarginEnd/app:expandedTitleMarginBottom : 指定展开后的标题具体方向的间距。
CarView简介:
CardView继承FrameLayout,所以CardView是一个ViewGroup,我们可以在里面添加一些控件进行布局。
特殊点就是有rounded corner(圆角)和shadow(阴影),这个就是它的特殊之处,回首往日,我们需要自定义shape文件进行实现圆角和阴影的设计,现在google的大牛已经把它设计为CardView的属性供我们设置进行使用。
CarView常用属性:
app:contentPadding:内容的padding
app:cardBackgroundColor 设置背景色
app:cardElevation 设置z轴阴影
app:cardMaxElevation 设置z轴最大高度值
app:cardUseCompatPadding 是否使用CompadPadding
app:cardPreventCornerOverlap 是否使用PreventCornerOverlap
app:contentPaddingLeft 内容的左padding
app:contentPaddingTop 内容的上padding
app:contentPaddingRight 内容的右padding
app:contentPaddingBottom 内容的底padding
二、实现效果

三、实现步骤
1、项目结构
2、准备工作
1).添加依赖

使用这些控件时,需要引入Android Design Library这个库,同时地,我们需要把app的主题也要做相应的修改以便适应这个控件,所以我们也需要appcompat这个库,引入cardview库,那么我们在build.gradle文件中引入如下:

    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'compile 'com.android.support:design:26.0.0-alpha1'compile 'com.android.support:cardview-v7:26.0.0-alpha1'

2).修改style.xml文件,用AppCompat兼容库中的主题,且设置成NoActionBar(没有活动栏)
注意事项:
item的name是colorPrimary而不是android:colorPrimary

<resources><style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- Customize your theme here. --><item name="colorPrimary">#269fe2</item><item name="colorPrimaryDark">#3A5FCD</item></style>
</resources>

3).字符串资源文件string.xml

<resources><string name="app_name">折叠工具栏</string><string name="content">Learn and Share Android,Learn and Share Android,Learn and Share Android,Learn and Share Android,Learn and Share Android</string>
</resources>
4.将图片资源方法mipmap文件夹中
5.修改activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"><android.support.design.widget.AppBarLayoutandroid:id="@+id/app_bar"android:layout_width="match_parent"android:layout_height="200dp"><!-- app:contentScrim 设置当工具栏收缩一定程度时所展示的主体颜色,--><android.support.design.widget.CollapsingToolbarLayoutandroid:id="@+id/collapsing_toolbar_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:minHeight="200dp"app:collapsedTitleGravity="left"app:expandedTitleMarginStart="10dp"app:expandedTitleMarginEnd="10dp"app:contentScrim="?attr/colorPrimary"app:layout_scrollFlags="scroll|exitUntilCollapsed"><!--ImageView应当方Toolbar上面,因为CollapsingToolbarLayout是帧式布  局,如方下面就在最上层,会被覆盖--><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:src="@mipmap/ic_bg"android:scaleType="centerCrop"app:layout_collapseMode="parallax"app:layout_collapseParallaxMultiplier="0.3"/><!--这里工具栏颜色默认是透明,当工具栏折叠后CollapsingToolbarLayout的颜色充当Toolbar背景颜色--><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"app:layout_collapseMode="pin"></android.support.v7.widget.Toolbar></android.support.design.widget.CollapsingToolbarLayout></android.support.design.widget.AppBarLayout><android.support.v4.widget.NestedScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"app:layout_behavior="@string/appbar_scrolling_view_behavior"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:paddingTop="24dp"><include layout="@layout/item_card"/><include layout="@layout/item_card"/><include layout="@layout/item_card"/><include layout="@layout/item_card"/><include layout="@layout/item_card"/><include layout="@layout/item_card"/></LinearLayout></android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
6.在layout文件夹中创建item_card.xml文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"app:contentPadding="10dp"app:cardElevation="10dp"app:cardCornerRadius="10dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Card"android:textSize="20sp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:text="@string/content"/>
</android.support.v7.widget.CardView>
7.修改MainActivity.java文件内容
注意此处MainActivity继承的是AppCompatActivity而不是Activity
public class MainActivity extends AppCompatActivity {Toolbar toolbar;CollapsingToolbarLayout mCollapsingToolbarLayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);mCollapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar_layout);mCollapsingToolbarLayout.setCollapsedTitleTextColor(Color.WHITE);mCollapsingToolbarLayout.setExpandedTitleColor(Color.WHITE);}
}

四、总结
常见错误:
错误一:效果如下

导致错误原因:
控件ImageView应该放在布局CollapsingToolbarLayout下的,而不是放在控件ToolBar。
错误二:效果如下

导致错误原因:
没有给可以滚动的视图(即NestedScrollView)设置布局行为(即app:layout_behavior)。
app:layout_behavior="@string/appbar_scrolling_view_behavior"
错误三:工具栏折叠后不变颜色
效果如下
导致错误原因:
原因1:控件Toolbar应该放在控件ImageView的下方。由于布局 CollapsingToolbarLayout继承的是FrameLayout(帧式布局),所以它也是帧式布局,控件ImageView宽和高设置的是充分父控件(CollapsingToolbarLayout),如果控件Toolbar位置放在了控件ImageView的上方(与就是Toolbar在底层,而ImageView在它上面一层),则Toolbar会被ImageView完全覆盖,所以导致看不见。
原因2:需要给布局CollapsingToolbarLayout设置属性app:contentScrim="颜色"(我这里设置的是"?attr/colorPrimary"即系统中工具栏的颜色,也可以设置其他值如"#f00"),app:contentScrim属性作用是设置当工具栏收缩一定程度时所展示的主体颜色;
错误四:
(工具栏不折叠)效果如下

导致错误原因:
没有给CollapsingToolbarLayout(折叠工具栏布局)设置滚动标志app:layout_scrollFlags。
应该设置app:layout_scrollFlags="scroll",才能滚动。
小结:在coordinatorLayout做父布局的情况下,给滑动控件设置一个app:layout_behavior="@string/appbar_scrolling_view_behavior"标志位,当带有该标志位的控件滑动时会触发带有layout_scrollFlags标志位的另一个控件滑动。此时imageview的layout_collapseMode是parallax,所以它会以有视差的方式来相对滑动,而toolbar设置了pin的标记位,所以在收缩后会固定在屏幕顶部。

实现折叠工具栏CollapsingToolbarLayout(折叠工具栏布局)相关推荐

  1. android 伸缩工具栏,看,这个工具栏能伸缩折叠——Android CollapsingToolbarLayout使用介绍...

    我非常喜欢Material Design里折叠工具栏的效果,bilibili Android客户端视频详情页就是采用的这种设计.这篇文章的第二部分我们就通过简单的模仿bilibili视频详情页的实现来 ...

  2. php 折叠菜单,SlashdotMenu 折叠菜单

    简明现代魔法 -> JavaScript -> SlashdotMenu 折叠菜单 SlashdotMenu 折叠菜单 2009-08-19 Slashdot Menu效果演示 控制菜单的 ...

  3. 华为5g鸿蒙折叠,华为5G折叠概念新机:内折叠+麒麟9000+鸿蒙OS 这才是华为的实力...

    从手机二十多年的发展历史来看,现在很多形态各异的智能手机,其设计思路与功能机时代一样,比如三星Fold的折叠手机,就和功能机时代的翻盖手机类似,又或者OPPO的X 2021卷轴屏概念机,则和功能机时代 ...

  4. 华为5g鸿蒙折叠,华为5G折叠概念新机:麒麟9000+鸿蒙OS 这才是华为的实力

    从手机二十多年的发展历史来看,现在很多形态各异的智能手机,其设计思路与功能机时代一样,比如三星Fold的折叠手机,就和功能机时代的翻盖手机类似,又或者OPPO的X 2021卷轴屏概念机,则和功能机时代 ...

  5. ATL 实现定制的 IE 浏览器栏、工具栏和桌面工具栏

    下载源代码 关键字:Band,Desk Band,Explorer Band,Tool Band,浏览器栏,工具栏,桌面工具栏 一.引言 最近,由于工作的要求,我需要在 IE 上做一些开发工作.于是在 ...

  6. 零基础Bootstrap入门教程(25)--折叠面板、折叠面板导航

    点此查看 所有教程.项目.源码导航 本文目录 1. 概述 2. 折叠面板 3. 折叠面板导航 4. 小结 1. 概述 上一篇我们讲述了折叠插件的用法,可以将任意的div元素包含的内容进行动态的折叠/显 ...

  7. android 实现控件搜索折叠效果 Animation动画折叠和普通折叠

    android 实现控件搜索折叠效果 Animation动画折叠和普通控件直接折叠效果: 原理很简单,都是获取对应的高度,通过实现高度变化而改变显示效果: 话不多说直接上代码 1.普通折叠效果,以下是 ...

  8. 物理-控制折叠:空间折叠

    ylbtech-物理-控制折叠:空间折叠 空间折叠是一种因为强大的引力使空间发生扭曲的现象.这种现象是真实存在的,因而在理论上只要能达到一定的引力就能使空间发生弯曲,就好比要从一张平整的纸一端到另一端 ...

  9. 计算机菜单右侧桌面,桌面工具栏怎么还原?工具栏在右边怎么办

    新手们在使用电脑的过程中总有这样那样的问题出现,尽管是很简单的问题,但是对于新手来说,一时也想不到对策,桌面工具栏怎么还原的问题则是其中一个再简单不过的问题了.工具栏在右边怎么办.工具栏怎么还原,这一 ...

  10. CollapsingToolbarLayout折叠toolbar的使用说明

    快速创建方法:(new------activity-----scrollactivity) 一般可以看到有这样几个效果: 1.背景图片渐渐消失变为主题颜色  2.FloatingActionButto ...

最新文章

  1. 云计算技术都要学什么?教你分清公有云、私有云和混合云
  2. 度量学习和pytorch-metric-learning的使用
  3. 数据库Sqlite3
  4. 《Python Cookbook 3rd》笔记(4.16):迭代器代替 while 无限循环
  5. Redis:分布式锁Watch
  6. java抽象类_Java抽象类
  7. Java8函数式编程详解
  8. B站网站后台工程源码泄露 用户信息还安全吗?
  9. jQuery 添加 input 表单提交 无数据
  10. 数字信号第二章freqz函数作业
  11. Python网络数据采集的方法
  12. linux parallel指令参数,GNU Parallel的具体使用
  13. 借助Amazon EMR与外部KDC进行身份认证,有效集成业务场景
  14. 产品 电信nb接口调用_电信物联网平台NBIoT使用Postman模拟测试接口
  15. 自定义异常:运行时期和编译时期的区别
  16. was not registered for synchronization because错误
  17. 数据结构与算法-二叉排序树
  18. 领导管理团队的3个正确方法
  19. BigDecimal比较建议用compareTo
  20. 微软图形控件(Chart或MSchart)的用法

热门文章

  1. 聚宽macd底背离_看图学大级别MACD底背离
  2. java 请求https post 接口 绕过证书验证
  3. 用java 把字符串写进文本,Java将字符串写入文本文件代码示例
  4. 一文搞定学术英语写作 (斯坦福SCI论文写作课程笔记)
  5. 电容与晶振电容的计算方式
  6. win 10计算机服务,win10 怎么打开服务_win10打开系统服务的3种方法
  7. 下周出发去印度:直觉之旅,发现自己
  8. 如何设计优秀的满意度调查问卷?
  9. 分而治之——最大子列和
  10. U盘文件格式简单介绍