Vlayout使用說明

3.1 初始化
創(chuàng)建VirtualLayoutManager對象,與RecycleView綁定

//創(chuàng)建VirtualLayoutManager對象VirtualLayoutManager layoutManager=newVirtualLayoutManager(activity);recyclerView.setLayoutManager(layoutManager);

3.2 設置回收復用池

//設置回收復用池大小,(如果一屏內相同類型的 View 個數(shù)比較多,需要設置一個合適的大小,防止來回滾動時重新創(chuàng)建 View)RecyclerView.RecycledViewPool viewPool=newRecyclerView.RecycledViewPool();recyclerView.setRecycledViewPool(viewPool);viewPool.setMaxRecycledViews(0,20);

3.3 設置RecycleView適配器

設置 V - Layout的Adapter有兩種方式:

定義:DelegateAdapter是V - Layout專門為管理 LayoutHelper定制的 Adapter

繼承自VirtualLayoutAdapter

作用:通過管理不同布局的Adapter勾拉,繼而管理不同的 LayoutHelper,從而實現(xiàn)使用不同組合布局

特別注意:雖不可直接綁定LayoutHelper,但是它內部有一個繼承自RecyclerView.Adapter的內部類Adapter可以綁定LayoutHelper噩死;

即通過一個List把綁定好的Adapter打包起來颤难,再放去DelegateAdapter,這樣就可以實現(xiàn)組合使用不同的布局

具體做法:

```

//設置適配器DelegateAdapterdelegateAdapter=newDelegateAdapter(layoutManager,true);recyclerView.setAdapter(delegateAdapter

publicclassBaseDelegateAdapterextendsDelegateAdapter.Adapter<BaseViewHolder>{

privateLayoutHelpermLayoutHelper;privateintmCount=-1;privateintmLayoutId=-1;privateContextmContext;privateintmViewTypeItem=-1;protectedBaseDelegateAdapter(Contextcontext,LayoutHelperlayoutHelper,intlayoutId,intcount,intviewTypeItem){this.mContext=context;this.mCount=count;this.mLayoutHelper=layoutHelper;this.mLayoutId=layoutId;this.mViewTypeItem=viewTypeItem;}@OverridepublicLayoutHelperonCreateLayoutHelper(){returnmLayoutHelper;}@OverridepublicBaseViewHolderonCreateViewHolder(ViewGroupparent,intviewType){if(viewType==mViewTypeItem){returnnewBaseViewHolder(LayoutInflater.from(mContext).inflate(mLayoutId,parent,false));}returnnull;}@OverridepublicvoidonBindViewHolder(BaseViewHolderholder,intposition){}/**

? ? * 必須重寫不然會出現(xiàn)滑動不流暢的情況

? ? */@OverridepublicintgetItemViewType(intposition){returnmViewTypeItem;}//條目數(shù)量@OverridepublicintgetItemCount(){returnmCount;}}

```

子LayoutHelper

* 定義:MarginLayoutHelper 的第二層具體實現(xiàn)

* 作用:負責具體的布局邏輯

? ? * 每種 子LayoutHelper 負責一種布局邏輯

? ? * 重點實現(xiàn)了 beforeLayout()已维、doLayout()乐严、afterLayout()

? ? * 特別是 doLayout():會獲取一組件,并對組件進行尺寸計算衣摩、界面布局

? ? * V - Layout 默認實現(xiàn)了10種默認布局:(對應同名的LayoutHelper)

* 特別注意:

? ? * 每一種 LayoutHelper 負責布局一批組件范圍內的組件昂验,不同組件范圍內的組件之間,如果類型相同艾扮,可以在滑動過程中回收復用既琴。因此回收粒度比較細,且可以跨布局類型復用.

? ? * 支持擴展外部:即注冊新的 LayoutHelper泡嘴,實現(xiàn)特殊的布局方式甫恩。下面會詳細說明


相關屬性介紹

5.1 LayoutHelper方法說明

* 5.1.1 margin,padding * Margin,padding就是外邊距、內邊距 * 它不是整個RecyclerView頁面的margin和padding酌予,它是每一塊LayoutHelper所負責的區(qū)域的margin和padding磺箕。 * 一個頁面里可以有多個LayoutHelper,意味著不同LayoutHelper可以設置不同的margin和padding抛虫。 * LayoutHelper的margin和padding與頁面RecyclerView的margin和padding可以共存松靡。 * 目前主要針對非fix類型的LayoutHelper實現(xiàn)了margin和padding,fix類型LayoutHelper內部沒有相對位置關系建椰,不處理邊距雕欺。* 5.1.2 dividerHeight * LinearLayoutHelper的屬性,LinearLayoutHelper是像ListView一樣的線性布局棉姐,dividerHeight就是每個組件之間的間距屠列。* 5.1.3 aspectRatio * 為了保證布局過程中視圖的高度一致,我們設計了aspectRatio屬性伞矩,它是寬與高的比例笛洛,LayoutHelper里有aspectRatio屬性,通過vlayout添加的視圖的LayoutParams也有aspectRatio屬性乃坤,后者的優(yōu)先級比前者高苛让,但含義不一樣。 * LayoutHelper定義的aspectRatio侥袜,指的是一行視圖整體的寬度與高度之比蝌诡,當然整體的寬度是減去了RecyclerView和對應的LayoutHelper的margin,padding。 * 視圖的LayoutParams定義的aspectRatio枫吧,指的是在LayoutHelper計算出視圖寬度之后浦旱,用來確定視圖高度時使用的,它會覆蓋通過LayoutHelper的aspectRatio計算出來的視圖高度九杂,因此具備更高優(yōu)先級颁湖。* 5.1.4 bgColor,bgImg * 背景顏色或者背景圖宣蠕,這其實不是布局屬性,但是由于在vlayout對視圖進行了直接布局甥捺,不同區(qū)域的視圖的父節(jié)點都是RecyclerView抢蚀,如果想要針對某一塊區(qū)域單獨繪制背景,就很難做到了镰禾。vlayout框架對此做了特殊處理皿曲,對于非fix、非float類型的LayoutHelper吴侦,支持配置背景色或背景圖屋休。同樣目前主要針對非fix類型的LayoutHelper實現(xiàn)這個特性。* 5.1.5 weights * ColumnLayoutHelper,GridLayoutHelper的屬性备韧,它們都是提供網格狀的布局能力劫樟,建議使用GridLayoutHelper,它的能力更加強大织堂,參考下文介紹叠艳。默認情況下,每個網格中每一列的寬度是一樣的易阳,通過weights屬性附较,可以指定讓每一列的寬度成比例分配,就像LinearLayout的weight屬性一樣闽烙。 weights屬性是一個float數(shù)組翅睛,每一項代表某一列占父容器寬度的百分比,總和建議是100黑竞,否則布局會超出容器寬度;如果布局中有4列疏旨,那么weights的長度也應該是4很魂;長度大于4,多出的部分不參與寬度計算檐涝;如果小于4遏匆,不足的部分默認平分剩余的空間。 * 比如谁榜,setweights(0.6,0.2,0.2);那么分配比例是3:1:1 * 5.1.6 vGap,hGap * GridLayoutHelper與StaggeredGridLayoutHelper都有這兩個屬性幅聘,分別控制視圖之間的垂直間距和水平間距。 * 5.1.7 spanCount,spanSizeLookup * GridLayoutHelper的屬性窃植,參考于系統(tǒng)的GridLayoutManager帝蒿,spanCount表示網格的列數(shù),默認情況下每一個視圖都占用一個網格區(qū)域巷怜,但通過提供自定義的spanSizeLookUp葛超,可以指定某個位置的視圖占用多個網格區(qū)域 * 5.1.8 autoExpand * GridLayoutHelper的屬性暴氏,當一行里視圖的個數(shù)少于spanCount值的時候,如果autoExpand為true绣张,視圖的總寬度會填滿可用區(qū)域答渔;否則會在屏幕上留空白區(qū)域。 * 5.1.9 lane * StaggeredGridLayoutHelper中有這個屬性侥涵,與GridLayoutHelper里的spanCount類似沼撕,控制瀑布流的列數(shù)。

5.2 fix類型的LayoutHelper方法說明

* 5.2.1 fixAreaAdjuster

? ? * fix類型的LayoutHelper芜飘,在可能需要設置一個相對父容器四個邊的偏移量端朵,比如整個頁面里有一個固定的標題欄添加在vlayout容器上,vlayout內部的fix類型視圖不希望與外部的標題有所重疊燃箭,那么就可以設置一個fixAreaAdjuster來做偏移冲呢。

* 5.2.2 alignType, x, y

? ? * FixLayoutHelper, ScrollFixLayoutHelper, FloatLayoutHelper的屬性,表示吸邊時的基準位置招狸,有四個取值敬拓,分別是TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT。x和y是相對這四個位置的偏移量裙戏,最終的偏移量還要受上述的fixAreaAdjuster影響乘凸。

? ? ? ? * TOP_LEFT:基準位置是左上角,x是視圖左邊相對父容器的左邊距偏移量累榜,y是視圖頂邊相對父容器的上邊距偏移量营勤;

? ? ? ? * TOP_RIGHT:基準位置是右上角,x是視圖右邊相對父容器的右邊距偏移量壹罚,y是視圖頂邊相對父容器的上邊距偏移量葛作;

? ? ? ? * BOTTOM_LEFT:基準位置是左下角,x是視圖左邊相對父容器的左邊距偏移量猖凛,y是視圖底邊相對父容器的下邊距偏移量赂蠢;

? ? ? ? * BOTTOM_RIGHT:基準位置是右下角,x是視圖右邊相對父容器的右邊距偏移量辨泳,y是視圖底邊相對父容器的下邊距偏移量虱岂;

* 5.2.3 showType

? ? * ScrollFixLayoutHelper的屬性,取值有SHOW_ALWAYS, SHOW_ON_ENTER, SHOW_ON_LEAVE菠红。

? ? ? ? * SHOW_ALWAYS:與FixLayoutHelper的行為一致第岖,固定在某個位置;

? ? ? ? * SHOW_ON_ENTER:默認不顯示視圖,當頁面滾動到這個視圖的位置的時候,才顯示舟茶;

? ? ? ? * SHOW_ON_LEAVE:默認不顯示視圖钥勋,當頁面滾出這個視圖的位置的時候顯示蕊肥;

* 5.2.4 stickyStart, offset

? ? * StickyLayoutHelper的屬性滑潘,當視圖的位置在屏幕范圍內時诗舰,視圖會隨頁面滾動而滾動蔓罚;當視圖的位置滑出屏幕時杠纵,StickyLayoutHelper會將視圖固定在頂部(stickyStart = true)或者底部(stickyStart = false)荠耽,固定的位置支持設置偏移量offset。


http://www.reibang.com/p/363ed30a5d53



https://blog.csdn.net/qq_35414752/article/details/79479848? 詳細

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末比藻,一起剝皮案震驚了整個濱河市铝量,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌银亲,老刑警劉巖慢叨,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異务蝠,居然都是意外死亡拍谐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門馏段,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轩拨,“玉大人,你說我怎么就攤上這事院喜⊥鋈兀” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵喷舀,是天一觀的道長砍濒。 經常有香客問我,道長硫麻,這世上最難降的妖魔是什么爸邢? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮庶香,結果婚禮上甲棍,老公的妹妹穿的比我還像新娘。我一直安慰自己赶掖,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布七扰。 她就那樣靜靜地躺著奢赂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颈走。 梳的紋絲不亂的頭發(fā)上膳灶,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音,去河邊找鬼轧钓。 笑死序厉,一個胖子當著我的面吹牛,可吹牛的內容都是我干的毕箍。 我是一名探鬼主播弛房,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼而柑!你這毒婦竟也來了文捶?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤媒咳,失蹤者是張志新(化名)和其女友劉穎粹排,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涩澡,經...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡顽耳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了妙同。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片射富。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖渐溶,靈堂內的尸體忽然破棺而出辉浦,到底是詐尸還是另有隱情,我是刑警寧澤茎辐,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布宪郊,位于F島的核電站,受9級特大地震影響拖陆,放射性物質發(fā)生泄漏弛槐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一依啰、第九天 我趴在偏房一處隱蔽的房頂上張望乎串。 院中可真熱鬧,春花似錦速警、人聲如沸叹誉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽长豁。三九已至,卻和暖如春忙灼,著一層夾襖步出監(jiān)牢的瞬間匠襟,已是汗流浹背钝侠。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留酸舍,地道東北人帅韧。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像啃勉,于是被迫代替她去往敵國和親忽舟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348