1. 程式人生 > >CoorinatorLayout協調者佈局

CoorinatorLayout協調者佈局

CoorinatorLayout是官方號稱的一種功能十分強大的FrameLayout(注意最新的實現是ViewGroup),主要有以下的兩種基本應用場景:
1. 作為應用的頂層裝飾佈局;
2. 作為協調有互動依賴的子View的容器。

用法

  1. CoorinatorLayout已流行了好一段時間,抽屜型Toolbar佈局則是很經典的樣例,推薦Mastering the Coordinator Layout,其佈局的精簡結構如下:

    <CoordinatorLayout>
        <AppbarLayout/>
        <scrollableView
    />
    </CoordinatorLayout>
  2. 在該文中AppBarLayout作為抽屜Toolbar的容器,NestedScrollView作為內容頁容器,通過NestedScrollView的滑動來觸發Toolbar的伸縮與摺疊,而CoorinatorLayout則作為上述兩子View的容器,負責協調這兩者的互動事件。

  3. 事實上NestedScrollView就是AppBarLayout的依賴,在沒有CoorinatorLayout前,實現上述功能處理其滑動事件會比較繁瑣,搞不好這些元件都存在耦合,擴充套件差的問題。
  4. 在該場景中CoorinatorLayout藉助於Behavior,比較清晰地實現了這些元件間的解耦。Behavior已預定好了如下的常見的事件回撥場景:
    這裡寫圖片描述
  5. 大多數方法都很常見,本文不再詳細介紹。本文關注兩個方法:

    public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency) {
            return false;
        }
    
    public boolean onDependentViewChanged(CoordinatorLayout parent, V child, View dependency) {
            return false;
        }
  6. 以上述AppBarLayout與NestedScrollView為例,AppBarLayout就是child,NestedScrollView就是dependency。在View的layout階段,先回調layoutDependsOn方法來決定是否觸發onDependentViewChanged,進而實現AppBarLayout跟隨NestedScrollView滑動實現抽屜效果。

  7. 當理解了CoordinatorLayout最核心的Behavior後,就可以是自定義各種Behavior實現非常炫酷的互動效果。實際上,在Android support包下就有許多Behavior的身影:
    這裡寫圖片描述

CoorinatorLayout佈局特性

  1. 在前面的例文中,還涉及到CoorinatorLayout比較特殊的佈局屬性layout_anchor與layout_anchorGravity,用法如下

    <android.support.design.widget.FloatingActionButton
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_margin="@dimen/activity_horizontal_margin"
        android:src="@drawable/ic_comment_24dp"
        app:layout_anchor="@id/main.appbar"
        app:layout_anchorGravity="bottom|right|end"
        />
  2. layout_anchor與layout_anchorGravity是用於設定CoorinatorLayout中直接子View的位置關係。在例子中FloatingActionButton是以AppBarLayout作為基準參照物,位於AppBarLayout中的右下角。
  3. 關於CoorinatorLayout的其它特性用法可以參考此樣例

原理

  1. 當了解了CoorinatorLayout的用法後,再去探索CoorinatorLayout是如何實現協調的功能就比較順利了。
  2. Behavior就是CoorinatorLayout為實現協調子View的佈局而分離出的介面層,預定了mesure、layout、touch、scroll和fling等事件回撥方法,使得有互動依賴的子View只需實現關注自己業務相關的回撥事件,實現子View間的解耦。
  3. Behavior另一個好處是將能將View的部分回撥方法分離出來,通過自定義Behavior,在CoorinatorLayout的協調下改寫某個View的行為。因為Behavior的獨立性,可以複用Behavior。
  4. CoorinatorLayout的實現本質上就是圍繞Behavior中的各種方法,通過監聽View中的多種事件,來觸發這些方法的回撥,整個CoorinatorLayout保持著較高的獨立性。

總結

  1. 減輕了實現多個Child View間炫酷聯動效果的成本
  2. Behavior的設計理念是降低View間耦合的典範,值得借鑑。
  3. CoorinatorLayout的侷限性在於Behavior所支援的事件回撥方法。

相關推薦

CoorinatorLayout協調佈局

CoorinatorLayout是官方號稱的一種功能十分強大的FrameLayout(注意最新的實現是ViewGroup),主要有以下的兩種基本應用場景: 1. 作為應用的頂層裝飾佈局;

Android 協調佈局

協調者佈局的誕生:             Android在推出5.0版本後推出了材料設定概念,並推出了design相容包,而我們本章所需要說的協調者佈局(CoordinatorLa

Android 開發 CoordinatorLayout 協調佈局 與 ConstraintLayout約束佈局 兩者的關係

  在摸索新技術是發現CoordinatorLayout 與 ConstraintLayout 會有衝突關係,所以就研究了一下他們之間的不相容,被影響的方面.其實某種程度上來說是CoordinatorLayout與其他Layout佈局之間的關係.     首先說明一下:   Coor

安卓5.0推出的協調佈局,其實關鍵的程式碼都在xml佈局

今天想做一個滑動到螢幕頂端的就停在哪裡大圖title,搜了一下資料,其實so  easy,直接上程式碼 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http:

上滑 顯示底部 下滑 隱藏頂部 協調佈局

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk

Android 協調佈局

協調者佈局的誕生:             Android在推出5.0版本後推出了材料設定概念,並推出了design相容包,而我們本章所需要說的協調者佈局(CoordinatorLayout)就在這design相容包之中。所以說,我們想要使用協調者佈局就需要去匯入desig

協調佈局 實現上下滑動

activity_main <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://sc

CoordinatorLayout,協調佈局

CoordinatorLayout,中文譯作協調者佈局,光聽這名字你可能很難判斷出協調者佈局有什麼特點,那麼我們來看看下面一張圖片: 由於CSDN對圖片大小的要求,我只能錄製一個快速播放的動畫,請大家見諒。但是顯示效果大家應該都看到了,就是當在頁面的上方有一個圖片,

Android 約束佈局

一.介紹約束佈局: ConstraintLayout 是一個 ViewGroup,它的出現是為了解決複雜佈局時,佈局巢狀(佈局內的佈局)過多的問題(巢狀佈局會增加繪製介面所需的時間)。它可以根據同級檢視和父佈局的約束條件為每個檢視定義位置,類似於 Relativ

專案經理在別人眼中是不是協調

摘自公號:慧翔天地PMP,可向小助手領取專案管理全部書籍和文件模板。 今日案例: 新入公司不久,擔任IT專案經理一職,但是期間感覺並沒有做什麼特別重要的事情,做的僅僅只是協調客戶、供應商以及商務之間的關係等等。雖然說這些也非常的重要但是還是有些不甘,感覺非常沒有幹勁,漸漸缺少了最初的新鮮感。

LCN協調服務集群

文件 官方文檔 tty 服務集群 官方 服務集 建立 wiki hub 官方文檔: https://github.com/codingapi/tx-lcn/wiki/TxManager%E9%9B%86%E7%BE%A4%E8%AF%B4%E6%98%8E 核心原理 通過該

LCN協調服務叢集

官方文件: https://github.com/codingapi/tx-lcn/wiki/TxManager%E9%9B%86%E7%BE%A4%E8%AF%B4%E6%98%8E 核心原理 通過該實現類 NettyDistributeServiceImpl  38行獲取伺服器叢集地址 &

RocketMQ讀書筆記4——NameServer(MQ的協調)

【NameServer簡述】   對於一個訊息佇列叢集來說,系統由很多機器組成,每個機器的角色、IP地址都不相同,而且這些資訊是變動的(如在某些情況下,會有新的Producer或Consumer加入)。   NameServer的存在主要是為了解決這類問題,由NameServer維護這些配置資訊、狀態資訊

Kafka技術內幕:消費者(高階和低階API)和 協調

生產者傳送訊息時在客戶端就按照節點和Partition進行分組,屬於同一個目標節點的多個Partition會作為同一個請求傳送到服務端,作為目標節點的服務端也可以處理來自不同生產者客戶端的請求。如果從網路層通訊來看,客戶端和服務端都會使用佇列的方式確保順序地客戶端傳送請求

仿慕課網視訊播放介面協調佈局

近日使用慕課網APP的時候,發現一個頁面效果感覺很有意思(正常情況下頁面可以滑動,但是當頁面中播放視訊的時候,只有 下面可以滑動),所以仿照這做了一個,效果圖如下: 主要是通過改變AppBarLayout的Flag來實現的,可以參考:https://www.jianshu.com/p/7

Android新元件CoordinatorLayout協調佈局的使用,結合TabLayout,結合DrawerLayout

偶爾的一次忘記是在哪裡了,看到的效果,Toolbar可以摺疊,拉下來是正常的ui,但是向上推這個正常的檢視就變為了Toolbar,看到之後自己就開始各種找,記得那時候是2015年的9月份左右,網上也沒有,搜demo也沒有,沒辦法只能自己琢磨了,還記得第一次使用的

協調多個物件之間的互動——中介模式(一)

      騰訊公司推出的QQ作為一款免費的即時聊天軟體深受廣大使用者的喜愛,它已經成為很多人學習、工作和生活的一部分(不要告訴我你沒有QQ哦,)。在QQ聊天中,一般有兩種聊天方式:第一種是使用者與使用

協調多個物件之間的互動——中介模式(三)

20.3 完整解決方案      為了協調介面元件物件之間的複雜互動關係,Sunny公司開發人員使用中介者模式來設計客戶資訊管理視窗,其結構示意圖如圖20-7所示:圖20-7 引入了中介者類的“客戶資訊

android5.0協調佈局CoordinatorLayout(第二篇CollapsingToolbarLayout效果實現原理講解)原理

上一篇中已經講解了CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout之間的關係,這一篇探索一下CollapsingToolbarLayout內部是怎麼實現的,不熟悉CoordinatorLayout、AppBarLa

Android協調佈局CoordinatorLayout 印象筆記

1.題記    本篇文章簡述下常見的協調佈局CoordinatorLayout的內部view之間的關係2.正文舉個最常見的佈局例子<?xml version="1.0" encoding="utf-8"?> <android.support.design.w