CoordinatorLayout 详解:布局协调与滚动效果实现
CoordinatorLayout 是在 Google I/O 2015 大会上发布的,遵循 Material Design 风格,包含在 support.design 包中。它结合 AppBarLayout、CollapsingToolbarLayout 等组件,可以产生各种炫酷的交互效果。本文将深入解析 CoordinatorLayout 的核心机制、常用组件及典型应用场景。
一、依赖配置
使用 CoordinatorLayout 前,需要在项目的 build.gradle 文件中添加相应的依赖。虽然旧版示例常使用 com.android.support:design,但在新项目中建议迁移至 AndroidX。
// 支持库版本(旧项目)
implementation 'com.android.support:design:23.3.0'
// AndroidX 版本(推荐新项目)
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
implementation 'com.google.android.material:material:1.2.0'
二、核心组件介绍
1. CoordinatorLayout
又名协调者布局,它是 support.design 包中的顶级父 View。简单来说,CoordinatorLayout 是一个超级强大的 FrameLayout,用来协调其子 View 并以触摸影响布局的形式产生动画效果。典型的子 View 包括 FloatingActionButton、SnackBar 等。
2. AppBarLayout
AppBarLayout 是 LinearLayout 的子类,通常用于放置 Toolbar 和 CollapsingToolbarLayout。必须在它的子 View 上设置 app:layout_scrollFlags 属性或者在代码中调用 setScrollFlags() 设置这个属性。
AppBarLayout 的子布局有 5 种滚动标识:
- scroll:所有想滚动出屏幕的 View 都需要设置这个 flag,没有设置的 View 将被固定在屏幕顶部。
- enterAlways:任意向下的滚动都会导致该 View 变为可见,启用快速'返回模式'。
- enterAlwaysCollapsed:假设定义了最小高度(minHeight)同时 enterAlways 也定义了,那么 View 将在到达这个最小高度的时候开始显示,并且从这个时候开始慢慢展开,当滚动到顶部的时候展开完。
- exitUntilCollapsed:当你定义了一个 minHeight,此布局将在滚动到达这个最小高度的时候折叠。
- snap:当一个滚动事件结束,如果视图是部分可见的,那么它将被滚动到收缩或展开。例如,如果视图只有底部 25% 显示,它将折叠;相反,如果它的底部 75% 可见,那么它将完全展开。
3. CollapsingToolbarLayout
CollapsingToolbarLayout 的作用是提供了一个可以折叠的 Toolbar,它继承自 FrameLayout。给它设置 layout_scrollFlags,它可以控制包含在 CollapsingToolbarLayout 中的控件(如 ImageView、Toolbar)在响应 layout_behavior 事件时作出相应的 scrollFlags 滚动事件(移除屏幕或固定在屏幕顶端)。
CollapsingToolbarLayout 可以通过 app:contentScrim 设置折叠时工具栏布局的颜色,通过 app:statusBarScrim 设置折叠时状态栏的颜色。默认 contentScrim 是 colorPrimary 的色值,statusBarScrim 是 colorPrimaryDark 的色值。
CollapsingToolbarLayout 的子布局有 3 种折叠模式(Toolbar 中设置的 app:layout_collapseMode):
- off:默认属性,布局将正常显示,无折叠行为。
- pin:CollapsingToolbarLayout 折叠后,此布局将固定在顶部。
- parallax:CollapsingToolbarLayout 折叠时,此布局也会有视差折叠效果。当 CollapsingToolbarLayout 的子布局设置了 parallax 模式时,还可以通过 设置视差滚动因子,值为 0~1。



