CoorinatorLayout協調者佈局
CoorinatorLayout是官方號稱的一種功能十分強大的FrameLayout(注意最新的實現是ViewGroup),主要有以下的兩種基本應用場景:
1. 作為應用的頂層裝飾佈局;
2. 作為協調有互動依賴的子View的容器。
用法
CoorinatorLayout已流行了好一段時間,抽屜型Toolbar佈局則是很經典的樣例,推薦Mastering the Coordinator Layout,其佈局的精簡結構如下:
<CoordinatorLayout> <AppbarLayout/> <scrollableView
在該文中AppBarLayout作為抽屜Toolbar的容器,NestedScrollView作為內容頁容器,通過NestedScrollView的滑動來觸發Toolbar的伸縮與摺疊,而CoorinatorLayout則作為上述兩子View的容器,負責協調這兩者的互動事件。
- 事實上NestedScrollView就是AppBarLayout的依賴,在沒有CoorinatorLayout前,實現上述功能處理其滑動事件會比較繁瑣,搞不好這些元件都存在耦合,擴充套件差的問題。
- 在該場景中CoorinatorLayout藉助於Behavior,比較清晰地實現了這些元件間的解耦。Behavior已預定好了如下的常見的事件回撥場景:
大多數方法都很常見,本文不再詳細介紹。本文關注兩個方法:
public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency) { return false; } public boolean onDependentViewChanged(CoordinatorLayout parent, V child, View dependency) { return false; }
以上述AppBarLayout與NestedScrollView為例,AppBarLayout就是child,NestedScrollView就是dependency。在View的layout階段,先回調layoutDependsOn方法來決定是否觸發onDependentViewChanged,進而實現AppBarLayout跟隨NestedScrollView滑動實現抽屜效果。
- 當理解了CoordinatorLayout最核心的Behavior後,就可以是自定義各種Behavior實現非常炫酷的互動效果。實際上,在Android support包下就有許多Behavior的身影:
CoorinatorLayout佈局特性
在前面的例文中,還涉及到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" />
- layout_anchor與layout_anchorGravity是用於設定CoorinatorLayout中直接子View的位置關係。在例子中FloatingActionButton是以AppBarLayout作為基準參照物,位於AppBarLayout中的右下角。
- 關於CoorinatorLayout的其它特性用法可以參考此樣例
原理
- 當了解了CoorinatorLayout的用法後,再去探索CoorinatorLayout是如何實現協調的功能就比較順利了。
- Behavior就是CoorinatorLayout為實現協調子View的佈局而分離出的介面層,預定了mesure、layout、touch、scroll和fling等事件回撥方法,使得有互動依賴的子View只需實現關注自己業務相關的回撥事件,實現子View間的解耦。
- Behavior另一個好處是將能將View的部分回撥方法分離出來,通過自定義Behavior,在CoorinatorLayout的協調下改寫某個View的行為。因為Behavior的獨立性,可以複用Behavior。
- CoorinatorLayout的實現本質上就是圍繞Behavior中的各種方法,通過監聽View中的多種事件,來觸發這些方法的回撥,整個CoorinatorLayout保持著較高的獨立性。
總結
- 減輕了實現多個Child View間炫酷聯動效果的成本
- Behavior的設計理念是降低View間耦合的典範,值得借鑑。
- 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