1:CoordinatorLayout 是一个普通的 ViewGroup,它的布局特性类似于 FrameLayout。 2:CoordinatorLayout 是超级 FrameLayout,它比 FrameLayout 更强悍的原因是它能与 Behavior 交互。 3:CoordinatorLayout 与 Behavior 相辅相成,它们一起构建了一个美妙的交互系统。 4:自定义 Behavior 主要有 2 个目的:1 确定一个 View 依赖另外一个 View 的依赖关系。2 指定一个 View 响应嵌套滑动事件。 5:确定两个 View 的依赖关系,有两种途径。一个是在 Behavior 中的 layoutDepentOn() 返回 true。另外一种就是直接通过 xml 锚定一个 View。当被依赖方尺寸和位置变化时,Behavior 中的 onDependentViewChanged 方法会被调用。如果在这个方法中改变了主动依赖的那个 view 的尺寸或者位置信息,应该在方法最后 return true。 6:嵌套滑动分为 nested scroll 和 fling 两种。Behavior 中相应的 View 是否接受响应由 onStartNestedScroll() 返回值决定。一般在 onNestedPreScroll() 处理相应的 nested scroll 响应,在 onPreFling 处理 fling 事件。但是这个不绝对,根据实际情况决定。 7:NestedScrollView 能够产生嵌套滑动事件是因为它本质上是一个 NestedScrollingChild 对象,而 CoordinatorLayout 能够响应是因为它本质上是一个 NestedScrollingParent 对象。 8:Behavior 是一种插件机制,如果没有 Behavior 的存在,CoordinatorLayout 和普通的 FrameLayout 无异。Behavior 的存在,可以决定 CoordinatorLayout 中对应的 childview 的测量尺寸、布局位置、触摸响应。
最后,回到文章最开始的地方。我们已经熟悉了 CoordinatorLayout,NestedScrollView 也了解一点点。而对于 AppbarLayout 我们还不了解。但是之前的恐慌却不存在了,因为了解到 Behavior 的机制,我们可以知道 CoordinatorLayout 并不是一定要和 AppBarLayout 或者 FloatButton 一起配合使用,它是独立的,抛开它们,我们通过自定义 Behavior 也可以实现非常炫丽的交互效果。
具体查看如下链接:
使用CoordinatorLayout过程中遇到的两个问题链接:
tab滑动吸顶链接: juejin.cn/post/684490…