偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Android Support Design 中 CoordinatorLayout 與 Behaviors 初探

移動(dòng)開發(fā) Android
其中有眾多的控件,其中最復(fù)雜,功能最強(qiáng)大的就是CoordinatorLayout,顧名思義,它是用來(lái)組織它的子views之間協(xié)作的一個(gè)父view。CoordinatorLayout默認(rèn)情況下可理解是一個(gè)FrameLayout,它的布局方式默認(rèn)是一層一層疊上去。

在Android M Preview發(fā)布后,我們獲得了一個(gè)新的support library —— Android Design Support Library 用來(lái)實(shí)現(xiàn)Google的Material Design 提供了一系列符合設(shè)計(jì)標(biāo)準(zhǔn)的控件。

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

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

看下CoordinatorLayout.Behavior對(duì)象的 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對(duì)象是用來(lái)給CoordinatorLayout的子view們進(jìn)行交互用的。

Behavior接口擁有很多個(gè)方法,我們拿AppBarLayout為例。AppBarLayout中有兩個(gè)Behavior,一個(gè)是拿來(lái)給它自己用的,另一個(gè)是拿來(lái)給它的兄弟結(jié)點(diǎn)用的,我們重點(diǎn)關(guān)注下AppBarLayout.ScrollingViewBehavior這個(gè)類。

我們看下這個(gè)類中的以下方法

0. dependency

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

這個(gè)方法告訴CoordinatorLayout,這個(gè)view是依賴AppBarLayout的,后續(xù)父親可以利用這個(gè)方法,查找到這個(gè)child所有依賴的兄弟結(jié)點(diǎn)。

1. measure

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

這個(gè)是CoordinatorLayout在進(jìn)行measure的過(guò)程中,利用Behavior對(duì)象對(duì)子view進(jìn)行大小測(cè)量的一個(gè)方法。

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

2. layout

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

這個(gè)方法是用來(lái)子view用來(lái)布局自身使用,如果依賴其他view,那么系統(tǒng)會(huì)首先調(diào)用

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

這個(gè)方法,可以在這個(gè)回調(diào)中記錄dependency的一些位置信息,在onLayoutChild中利用保存下來(lái)的信息進(jìn)行計(jì)算,然后得到自身的具體位置。

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) 

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

總結(jié)

可以看到CoodinatorLayout給我們實(shí)現(xiàn)了一個(gè)可以被子view代理實(shí)現(xiàn)方法的一個(gè)布局。這和傳統(tǒng)的ViewGroup不同,子view從此知道了彼此之間的存在,一個(gè)子view的變化可以通知到另一個(gè)子view。CoordinatorLayout所做的事情就是當(dāng)成一個(gè)通信的橋梁,連接不同的view。使用Behavior對(duì)象進(jìn)行通信。

我們具體的實(shí)現(xiàn)可以參照 Android官方文檔告訴我們的每一個(gè)方法的作用 進(jìn)行重寫,實(shí)現(xiàn)自己想要的各種復(fù)雜的功能。

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

有了這么一套機(jī)制,想實(shí)現(xiàn)組件之間的交互,就更加方便快捷啦~

責(zé)任編輯:chenqingxiang 來(lái)源: Gemini
相關(guān)推薦

2018-04-25 09:06:32

Chrome瀏覽器語(yǔ)言

2013-05-21 09:17:16

Android DesHolo Theme卡片式設(shè)計(jì)

2015-08-07 10:24:17

AndroidMaterialDes

2012-07-09 10:22:28

Mono for An

2011-06-16 10:25:29

AndroidAIR

2011-05-26 16:28:08

Android jQuery

2011-06-02 11:13:10

Android Activity

2011-09-07 10:58:07

Android wid

2023-10-24 19:37:34

協(xié)程Java

2009-11-05 15:50:25

WCF behavio

2020-04-22 13:23:46

智能合約區(qū)塊鏈比特幣

2013-11-14 16:03:23

Android設(shè)計(jì)Android Des

2010-08-03 10:32:42

Android 3.0Android 3.0Android開發(fā)

2013-05-16 10:58:44

Android開發(fā)自動(dòng)化測(cè)試

2022-04-19 09:24:18

QtC++框架

2017-11-07 12:53:28

Android庫(kù)支持庫(kù)

2017-02-14 13:35:15

AndroidMaterial De動(dòng)畫

2009-10-30 10:45:45

ScalaEclipseAndroid

2009-03-30 15:52:24

Windows Emb

2009-07-08 17:40:28

ScalaScala腳本
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)