1.前言
CoordinatorLayout(协调者布局)。协调child之间的联动。
主要依靠一个插件--Behavior。
在CoordinatorLayout内部,每个child都必须带一个Behavior,中心指挥者就可以根据Behavior来为子View指定依赖的同级View、嵌套滑动、事件拦截。
本文介绍CoordinatorLayout中layout_scrollFlags标签各参数效果。
2. “CoordinatorLayout”具体实现:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
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="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/abl_appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<ImageView
android:id="@+id/iv_header"
android:layout_width="match_parent"
android:layout_height="300dp"
android:scaleType="centerCrop"
android:src="@drawable/pic_personal_title"
app:layout_scrollFlags="noScroll" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_material_demo"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
3. “更换layout_scrollFlags”属性查看具体表现:
3.1 NoScroll
View保持静止,不随RecyclerView滚动
app:layout_scrollFlags="noScroll"
noscroll.gif
3.2 Scroll
View保持和RecyclerView同步滚动
app:layout_scrollFlags="scroll"
scroll.gif
3.3 scroll_enterAlways
反向滑动。View先出现,然后recycler继续滑动
app:layout_scrollFlags="scroll|enterAlways"
scroll_enterAlways.gif
3.4 scroll_enterAlways_enterAlwaysCollapsed(minHeight)
需要有minHeight属性
反向滑动。View先出现(只出现minHeight高度),然后recycler继续滑动到顶部,才出现View全部高度。
注意:enterAlwaysCollapsed需要配合enterAlways使用。
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
scroll_enterAlways_enterAlwaysCollapsed(minHeight).gif
3.5 scroll_exitUntilCollapsed(minHeight)
正向滑动,View收起至minHeight高度便不再继续滑动,保持置顶悬挂。
app:layout_scrollFlags="scroll|exitUntilCollapsed"
scroll_exitUntilCollapsed(minHeight).gif
3.6 scroll_snap
随RecyclerView滑动,区别是自带吸附功能。未滑动到指定位置,将自动吸附。
app:layout_scrollFlags="scroll|snap"
scroll_snap.gif