說一說V-Layout框架的原理和使用場景

Vlayout是alibaba開源的一個基礎ui框架,用於快速實現一些複雜佈局,在淘寶和天貓App中都有使用。git

demo

先來看一下官方的介紹:github

VirtualLayout是一個針對RecyclerView的LayoutManager擴展, 主要提供一整套佈局方案和佈局間的組件複用的問題。緩存

經過定製化的LayoutManager,接管整個RecyclerView的佈局邏輯;LayoutManager管理了一系列LayoutHelper,LayoutHelper負責具體佈局邏輯實現的地方;每個LayoutHelper負責頁面某一個範圍內的組件佈局;不一樣的LayoutHelper能夠作不一樣的佈局邏輯,所以能夠在一個RecyclerView頁面裏提供異構的佈局結構,這就能比系統自帶的LinearLayoutManager、GridLayoutManager等提供更加豐富的能力。同時支持擴展LayoutHelper來提供更多的佈局能力。微信

從RecyclerView出發

VLayout主要擴展自RecyclerView,咱們就從RecyclerView提及,先來看一下RecyclerView中的幾個關鍵元素:框架

盜圖一張

  • RecyclerView.LayoutManager
    主要負責對RecyclerView中的ItemView佈局,咱們常常用到它的子類:
    佈局

  • RecyclerView.ItemDecoration
    給每一項Item視圖添加子View,能夠在Item直接增長分割線等動畫

  • RecyclerView.ItemAnimator
    負責處理Item添加或者刪除時候的動畫效果ui

  • RecyclerView.Adapter
    爲每個positon提供ViewHoldercdn

  • RecyclerView.ViewHolder
    負責Item 自身的佈局,並參與到RecyclerView的緩存策略中。blog

VLayout的思路

從官網的介紹VLayout擴展的主要是LayoutManager,具體佈局邏輯在LayoutHelper中實現。Vlayout提供了各類各樣的LayoutHelper實現,同時也能夠很是容易地擴展實現自定義的LayoutHelper。

能夠看的上圖的列表中有各類各樣的佈局,這些都是LayoutHelper的功勞。

咱們知道在RecyclerView中正常是隻有一種佈局的,若是列表中須要使用不一樣的佈局,能夠經過設置不一樣的ItemType,提供多種ViewHolder來實現。

VLayout使用了不一樣的思路。其繼承RecyclerView.Adapter類來實現DelegateAdapter類,經過DelegateAdapter來實現複雜佈局的展現,同時實現了本身的緩存。

DelegateAdapter的原理實際上是串聯多個繼承自RecyclerView.Adapter的adapter來管理數據和視圖的適配:

因此每一個adapter和layouthelper負責一個區域,每一個區域有多個ItemView。

DelegateAdapter負責組合多個adapter,展現在RecyclerView中。

這有一個比較明顯的缺點是,每一個子adapter只負責一個連續的區域,若是,有多個區域須要一樣的adapter,就須要添加兩次adapter。

VLayout 使用場景

從以上的分析中,我的認爲相似淘寶這樣形式的佈局很是適合使用VLayout,而且VLayout提供了多種layoutHelper,使用很是方便。

可是若是是相似於微博、微信這種Feed流爲主的界面,使用VLayout並無什麼優點,徒增實現的複雜度。

歡迎關注公衆號wutongke,按期推送移動開發前沿技術文章:

wutongke

推薦閱讀

說一說Facebook開源的Litho
使用ConstraintLayout製做漂亮的動畫

相關文章
相關標籤/搜索