CoordinatorLayout的几个重要的参数:
Behavior字面意思就是行为举止,这里我们通过自定义Behavior来实现自己需要的效果。
-
首先创建一个类 extends Coordinator.Behavior<T>{}
释义:childView,这个是主动依赖的View即T
dependencyView是被依赖的View,即:chidlView 会根据dependencyView的变化发生相应的变化。 -
给自定义的Behavior定义构造方法,要调用父类的有两个参数的构造方法如下:
public MyBehavior(Context context, AttributeSet attrs) { super(context, attrs); }
否则会报错:Could not inflate Behavior subclass 包名.MyBehavior
- 重写最终要的两个方法:
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, Button child, View dependency) {
return dependency instanceof MyView;
}
//释义:该方法是检测被依赖的View(即dependencyView)是否是我们这里定义的View,即:MyView。返回false表示child不依赖dependency,ture表示依赖
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, Button child, View dependency) {
int top = dependency.getTop();
//更新childView
updateChild(child, top);
return true;
}
//释义:这里就是监听 被依赖的dependencyView的变化,然后对ChildView进行相应的变化即可。
-
然后在CoordinatorLayout布局中加入ChildView和DependencyView,并在ChildView中加入属性:
app:layout_behavior="com.thc.myzhihu.materialdesigndemo.MyBehavior"
网友评论