CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout结合起来才能产生这么神奇的效果,不要幻想使用其中的一个控件就能完成这样的效果
ToolBar的设置
系统默认使用的就是系统自带的ActionBar,如果我们要使用自定义的ToolBar,就必须明确的告诉Activity不需要使用系统自带的ActionBar即要给activity设置NoActionBar的样式,另外必须调用setSupportActionBar(toolbar)将自己定义的ToolBar设置给Activity。
CoordinatorLayout下可滑动控件的设置
CoordinatorLayout作为整个布局的父布局容器。给你的可以滑动的控件例如RecyclerView设置如下属性:app:layout_behavior=@string/appbar_scrolling_view_behavior
CoordinatorLayout还提供了layout_anchor 和 layout_anchorGravity属性一起配合使用,可以用于设置FloatingActionButton的位置,此处我是放在appBar的右下角。
app:layout_anchor=“@id/appbar”
app:layout_anchorGravity=“bottom|right|end”
CollapsingToolbarLayout的layout_scrollFlags属性
AppBarLayout里面定义的子view只要设置了app:layout_scrollFlags属性,就可以在RecyclerView滚动事件发生的时候被触发某种行为
例如我给CollapsingToolbarLayout控件设置了 app:layout_scrollFlags="scroll|exitUntilCollapsed"此刻如果没有这个属性,CollapsingToolbarLayout是不会折叠的那么问题来了,layout_scrollFlags中的属性值除了可以触发折叠的行为,还有其它的属性值吗?并且各个属性的意义是什么?scroll至少有一个scroll,即可滚动。
| 属性 | 作用 |
| — | — |
| scroll | 必须要给其至少有设置一个scroll,即可滚动 |
| enterAlways | 向下滚动即可见。例如下拉时,立即显示Toolbar |
| exitUntilCollapsed | 这个flag是定义何时收缩。当你定义了一个minHeight,这个view将在滚动到达这个最小高度的时候消失 |
| enterAlwaysCollapsed | 这个flag是定义何时展开。当你定义了一个最小高度minHeight, 同时enterAlways也定义了,那么view将在到达这个最小高度的时候开始展示 |
| snap | 当一个滚动事件结束,它将根据显示百分比的大小自动滚动到收缩或展开。 |
如果不设置该属性,则该布局不能滑动
CollapsingToolbarLayout的其他属性
另外还可以给CollapsingToolbarLayout设置以下属性:
| 属性 | 作用 |
| — | — |
| contentScrim | 设置当完全折叠(收缩)后的背景颜色。 |
| expandedTitleMarginEnd | 没有扩张的时候标题显示的位置 |
| expandedTitleMarginStart | 扩张的时候标题向左填充的距离。 |
| statusBarScrim | 设置折叠时状态栏的颜色 |
CollapsingToolbarLayout下的view的layout_collapseMode属性
CollapsingToolbarLayout里面定义的view只要设置了app:layout_collapseMode属性,就可以控制子视图的折叠模式。
折叠模式分为两种:
| 属性 | 作用 |
| — | — |
| pin | 固定模式。在收缩的时候最后固定在顶端(例如向上滚动的时候就固定toolBar) |
| parallax | 视差模式,在折叠的时候会有个视