关于CoordinatorLayout的使用
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0717/3196.html
这篇文章是翻译的,CoordinatorLayout的各种用法基本都讲了。
以下是我个人的理解。
在使用CoordinatorLayout时,如果需要某一个view主导滑动,要添加这样一个属性
app:layout_behavior="@string/appbar_scrolling_view_behavior"
这个属性后面传入的字符串是类名,@string/appbar_scrolling_view_behavior对应的是
AppBarLayout.ScrollingViewBehavior这个内部类。
这个内部类继承了ViewOffsetBehavior,泛型是任何view,
ViewOffsetBehavior又继承了CoordinatorLayout.Behavior。
app:layout_behavior这个属性跟Behavior是怎么联系起来的呢?
1、Behavior的实例化
在CoordinatorLayout的内部类,LayoutParams里面有以下代码
LayoutParams(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, styleable.CoordinatorLayout_LayoutParams);
...
//先判断一下layout_behavior有没有值
this.mBehaviorResolved = a.hasValue(styleable.CoordinatorLayout_LayoutParams_layout_behavior);
if(this.mBehaviorResolved) {
//通过parseBehavior()返回了一个Behavior
this.mBehavior = CoordinatorLayout.parseBehavior(context, attrs, a.getString(styleable.CoordinatorLayout_LayoutParams_layout_behavior));
}
...
}
在这里,parseBehavior()这个方法通过反射实例化了mBehavior 。
- AppBarLayout对Bahavior的实现
app:layout_behavior="@string/appbar_scrolling_view_behavior"
这个字符串对应的类——AppBarLayout.ScrollingViewBehavior。
ScrollingViewBehavior重写了behavior的layoutDependsOn()。
public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
return dependency