CoordinatorLayout佈局的簡單實用

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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章