CoordinatorLayout是support.design包中的控件,它可以说是Design库中最重要的控件。
本文通过模仿知乎介绍了自定义Behavior,通过模仿百度地图介绍了BottomSheetBehavior的使用。
1.CoordinatorLayout介绍
官方对CoordinatorLayout的描述是这样的:CoordinatorLayout is a super-powered FrameLayout.
CoordinatorLayout is intended for two primary use cases:As a top-level application decor or chrome layout
As a container for a specific interaction with one or more child views
官方对Behavior的描述是这样的:Interaction behavior plugin for child views of CoordinatorLayout.
简单来说,CoordinatorLayout是用来协调其子view们之间动作的一个父view,而Behavior就是用来给CoordinatorLayout的子view们实现交互的。
CoordinatorLayout在我之前的文章中都有出镜:
Snackbar与FloatingActionButton的互动
看,这个工具栏能伸缩折叠——Android CollapsingToolbarLayout使用介绍中CollapsingToolbarLayout折叠或展开时,FloatingActionButton跟随运动并且大小相应变化:
AppBarLayout与FloatingActionButton的互动
看下FloatingActionButton的源码就能发现其中有一个Behavior方法继承自CoordinatorLayout.Behavior,并在其中实现了与Snackbar互动时的逻辑。
我本文使用的support:design版本是23.4.0
2.自定义Behavior模仿知乎
知乎的效果.gif
本文实现的效果.gif
先看下布局<?xml version="1.0" encoding="utf-8"?>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways|snap"
android:background="?attr/colorPrimary" />
android:id="@+id/behavior_demo_swipe_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
android:id="@+id/behavior_demo_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="16dp"
android:layout_marginBottom="72dp"
android:class="lazyload" src="https://img-blog.csdnimg.cn/2022010610555812710.png" data-original="@android:drawable/ic_dialog_