CoordinatorLayout布局的简单实用

来源:互联网 发布:淘宝怎么删差评 编辑:程序博客网 时间:2024/05/01 23:41

1、首先导入依赖

compile'com.android.support:design:22.2.1'


2、CoordinatorLayout能做什么

在学习CoordinatorLayout之前,很有必要了解CoordinatorLayout能帮我们做什么,从名字上可以看出,就是帮我们协调子View的。

怎么个协调法呢?就是它根据我们的定制,帮助我们协调各个子View的布局。

3、CoordinatorLayout的使用

CoordinatorLayout的使用核心是BehaviorBehavior就是执行你定制的动作。在讲Behavior之前必须先理解两个概念:ChildDependency,什么意思呢?Child当然是子View的意思了,是谁的子View呢,当然是CoordinatorLayout的子View;其实Child是指要执行动作的CoordinatorLayout的子View

Dependency是指Child依赖的View。比如上面的gif图中,蓝色的View就是Dependency,黄色的View就是Child,因为黄色的View的动作是依赖于蓝色的View。简而言之,就是如过Dependency这个View发生了变化,那么Child这个View就要相应发生变化。发生变化是具体发生什么变化呢?

这里就要引入BehaviorChild发生变化的具体执行的代码都是放在Behavior这个类里面。

怎么使用Behavior呢,首先,我们定义一个类,继承CoordinatorLayout.Behavior<T>,其中,泛型参数T是我们要执行动作的View类,也就是Child。然后就是去实现Behavior的两个方法:

<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*** 判断child的布局是否依赖dependency*/</span>   <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> <span class="hljs-title" style="box-sizing: border-box;">layoutDependsOn</span>(CoordinatorLayout parent, T child, View dependency) {    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> rs;    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//根据逻辑判断rs的取值</span>    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//返回false表示child不依赖dependency,ture表示依赖</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> rs;  }<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*** 当dependency发生改变时(位置、宽高等),执行这个函数* 返回true表示child的位置或者是宽高要发生改变,否则就返回false*/</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> <span class="hljs-title" style="box-sizing: border-box;">onDependentViewChanged</span>(CoordinatorLayout parent, T child, View dependency) {     <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//child要执行的具体动作</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;}</code>

2 0