CoordinatorLayout的behavior如何工作
-
自定义Behavior放的全类名
parseBehavior解析布局文件中制定的BehaviorBehavior到底是怎么实例的,调用 parseBehavior 解析我们设置的 layout_behavior :
1.获取设置好的全类名 xxx.xx.xx 还可以是 .xx
2.通过类名获取 class 然后获取两个参数的构造方法
3.通过反射创建 Behavior 对象 newInatence() , 把所有的 behavior 放入了集合CoordinatorLayout 里面有一个 onNestedScroll 方法,里面for循环调用子View的Behavior的onNestedScroll的方法
CoordinatorLayout 自己并没有调用 onNestedScroll方法RecyclerView 里面 startNestedScroll -> ViewParentCompat.onStartNestedScroll() -> IMPL.onStartNestedScroll()
-> ViewParentCompatLollipopImpl . onStartNestedScroll() -> parent.onStartNestedScroll() -> CoordinatorLayout . onStartNestedScroll() -
Behavior要能够有效果必须要用 CoordinatorLayout 包裹必须是直接子类
LinearLayout
RelativeLayout 解析子布局的属性
Behavior 是layout_behavior 只能由 CoordinatorLayout的LayoutParams去解析 -
Behavior的效果到底是怎么传递
ThreadLocal :Handler 源码,保证线程数据安全,保证一个线程只有一个 ThreadLocal 实例
SnackBar 源码分析
2.1 一直显示在底部 android:layout_gravity=“bottom” SnackbarBaseLayout
2.2 动画怎么做的? 两个位移动画
2.3 会把 FloatingActionButton 往上挤,前提是父布局要是 CoordinatorLayout 如果不是就不会挤
findSuitableParent() 找SnackBar的父布局,CoordinatorLayout 其次 FrameLayout
解析系统的布局 ,不居中只有一个文本 + 一个Button 把它加入了 SnackbarBaseLayout
显示是调用的 BaseTransientBottomBar 的 show 隐藏是 hide
如果父布局是CoordinatorLayout 还可以向右滑动删除,ViewCompat.animate() 开启动画进入
本文深入探讨了Android CoordinatorLayout的Behavior工作机制,包括自定义Behavior的实现、布局解析过程以及Behavior如何影响子View的滚动行为。分析了SnackBar的显示动画和与FloatingActionButton的交互,强调Behavior生效的条件及CoordinatorLayout的onNestedScroll方法调用链。同时,讨论了ThreadLocal在保证线程安全中的作用。
920

被折叠的 条评论
为什么被折叠?



