成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android Support Design 中 CoordinatorLayout 與 Behaviors 初探

移動開發 Android
其中有眾多的控件,其中最復雜,功能最強大的就是CoordinatorLayout,顧名思義,它是用來組織它的子views之間協作的一個父view。CoordinatorLayout默認情況下可理解是一個FrameLayout,它的布局方式默認是一層一層疊上去。

在Android M Preview發布后,我們獲得了一個新的support library —— Android Design Support Library 用來實現Google的Material Design 提供了一系列符合設計標準的控件。

其中有眾多的控件,其中最復雜,功能***大的就是CoordinatorLayout,顧名思義,它是用來組織它的子views之間協作的一個父view。CoordinatorLayout默認情況下可理解是一個FrameLayout,它的布局方式默認是一層一層疊上去。

那么,CoordinatorLayout的神奇之處就在于Behavior對象了。

看下CoordinatorLayout.Behavior對象的 Overview

  1. Interaction behavior plugin for child views of CoordinatorLayout. 
  2.  
  3.  Behavior implements one or more interactions that a user can take on a child view. These interactions may include drags, swipes, flings, or any other gestures. 

可知Behavior對象是用來給CoordinatorLayout的子view們進行交互用的。

Behavior接口擁有很多個方法,我們拿AppBarLayout為例。AppBarLayout中有兩個Behavior,一個是拿來給它自己用的,另一個是拿來給它的兄弟結點用的,我們重點關注下AppBarLayout.ScrollingViewBehavior這個類。

我們看下這個類中的以下方法

0. dependency

  1. public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) { 
  2. return dependency instanceof AppBarLayout; 

這個方法告訴CoordinatorLayout,這個view是依賴AppBarLayout的,后續父親可以利用這個方法,查找到這個child所有依賴的兄弟結點。

1. measure

  1. public boolean onMeasureChild(CoordinatorLayout parent, View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) 

這個是CoordinatorLayout在進行measure的過程中,利用Behavior對象對子view進行大小測量的一個方法。

在這個方法內,我們可以通過parent.getDependencies(child);這個方法,獲取到這個child依賴的view,然后通過獲取這個child依賴的view的大小來決定自身的大小。

2. layout

  1. public boolean onLayoutChild(CoordinatorLayout parent, View child, int layoutDirection) 

這個方法是用來子view用來布局自身使用,如果依賴其他view,那么系統會首先調用

public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency)

這個方法,可以在這個回調中記錄dependency的一些位置信息,在onLayoutChild中利用保存下來的信息進行計算,然后得到自身的具體位置。

3. nested scroll

  1.  public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View directTargetChild, View target, int nestedScrollAxes) 
  2.  
  3. public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed) 
  4.  
  5. public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) 
  6.  
  7. public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target) 

這幾個方法是不是特別熟悉?我在Android嵌套滑動機制(NestedScrolling) 介紹過,這幾個方法剛好是NestedScrollingParent的方法,也就是對CoodinatorLayout進行的一個代理(Proxy),即CoordinatorLayout自己不對這些消息進行處理,而是傳遞給子view的Behavior,進行處理。利用這樣的方法,實現了view和view之間的交互和視覺的協同(布局、滑動)。

總結

可以看到CoodinatorLayout給我們實現了一個可以被子view代理實現方法的一個布局。這和傳統的ViewGroup不同,子view從此知道了彼此之間的存在,一個子view的變化可以通知到另一個子view。CoordinatorLayout所做的事情就是當成一個通信的橋梁,連接不同的view。使用Behavior對象進行通信。

我們具體的實現可以參照 Android官方文檔告訴我們的每一個方法的作用 進行重寫,實現自己想要的各種復雜的功能。

https://developer.android.com/reference/android/support/design/widget/...

有了這么一套機制,想實現組件之間的交互,就更加方便快捷啦~

責任編輯:chenqingxiang 來源: Gemini
相關推薦

2018-04-25 09:06:32

Chrome瀏覽器語言

2013-05-21 09:17:16

Android DesHolo Theme卡片式設計

2015-08-07 10:24:17

AndroidMaterialDes

2011-06-16 10:25:29

AndroidAIR

2012-07-09 10:22:28

Mono for An

2011-06-02 11:13:10

Android Activity

2011-09-07 10:58:07

Android wid

2023-10-24 19:37:34

協程Java

2011-05-26 16:28:08

Android jQuery

2009-11-05 15:50:25

WCF behavio

2020-04-22 13:23:46

智能合約區塊鏈比特幣

2013-11-14 16:03:23

Android設計Android Des

2013-05-16 10:58:44

Android開發自動化測試

2010-08-03 10:32:42

Android 3.0Android 3.0Android開發

2017-11-07 12:53:28

Android支持庫

2022-04-19 09:24:18

QtC++框架

2009-10-30 10:45:45

ScalaEclipseAndroid

2017-02-14 13:35:15

AndroidMaterial De動畫

2009-03-30 15:52:24

Windows Emb

2009-07-08 17:40:28

ScalaScala腳本
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区在线视频 | 九一视频在线播放 | 久久国产免费 | 激情av网站 | 黄色网址在线免费观看 | 黄色三级毛片 | 亚洲av毛片| 成人在线电影网站 | 国产高清视频一区 | 亚洲国产日韩一区 | 在线日韩精品视频 | h视频在线观看免费 | 亚洲精品久久久久久久久久吃药 | 色播久久 | 国产婷婷色一区二区三区 | 国产一区二区三区网站 | 国产专区视频 | 国产高清不卡 | 青青操91| 免费精品久久久久久中文字幕 | 美日韩免费视频 | 国产美女一区二区三区 | 精品av久久久久电影 | 国产亚洲精品久久情网 | 欧美日韩一区二区三区四区 | 免费人成激情视频在线观看冫 | 日本免费一区二区三区视频 | 美女三区 | 欧美激情视频网站 | 欧美精品成人 | 老子午夜影院 | 麻豆久久久久久久久久 | 亚洲精品888 | 国产高清一区二区 | 中文在线a在线 | 欧美毛片免费观看 | 爱草在线| 九九色综合| 久久一二区 | 夜夜艹| 激情一区二区三区 |