安卓開發進階之彈性佈局FlexboxLayout--Part3(翻譯)

原文鏈接
安卓開發進階之彈性佈局FlexboxLayout–Part1(翻譯)
安卓開發進階之彈性佈局FlexboxLayout–Part2(翻譯)

這篇文章將探索真實需求裏FlexboxLayout能實現的效果。FlexboxLayout的一種使用情況是以表單的形式顯示內容,但是這並不如想象中那樣直來直去。因爲對於新的一行,FlexboxLayout將會包裹 (wrap),這使得我們控制起來很不那麼容易。

有一種方式能夠很好的實現表單效果,那就是flexBasisPercent屬性,每個子佈局使用該屬性,並且同一行所有子佈局的該屬性值加起來之和爲1.0。在下面例子中,子項1和4的flexBasisPercent值各爲0.5,並且子項0,2,3和5的flexBasisPercent屬性值各爲0.2,layout_flexGrow屬性值爲1。儘管子項0,1和2的layout_flexBasisPercent屬性值之和僅爲0.9,子項3將超過線的寬度,所以我們包裹。由於子項0,2,3和5由於layout_FlexGrow 屬性值爲1,所以它們填滿剩餘空間。

至此,實現的效果與PercentLayout非常相似,然而,PercentLayout與FlexboxLayout之間微小的差異體現在子項3將會被包裹。
實現表單的另一種方法是每行使用一個單獨的FlexboxLayout,然後在該行中放置子佈局。給每個FlexboxLayout行設置公共的style,該style就能在每行生效。正如HTML中CSS flexbox模型,FlexboxLayout也來源於此。然而在安卓中每行一個單獨的ViewGroup是低效的並且FlexboxLayout通過LinearLayouts內嵌TableLayout來對性能進行微小的改善。

儘管FlexboxLayout是從CSS flexbox模型(對安卓中的實現有所啓發)中分離出來的,有一個關於FlexLayout(也許是flexLineItems)的屬性,該屬性的值超過每一行後會強制包裹,並且有一個對子view的layout_wrapAfter=”true”選項。
這些附加的東西使得用單個FlexboxLayout來顯示錶單內容更容易,並且是通過包裹來進行更多的控制。該附加信息能夠提供類似GridLayout的效果。關於這點,我在Git上面來了個話題,歡迎大家來討論。

所以到目前爲止,就需要的ViewGroups數量而言,FlexboxLayout沒有比TableLayout’和嵌套的LinearLayout更具性能優勢,所以哪些用戶案例使用更高效呢?
第一個使用的地方是如果內容是尺寸均勻的,你僅僅需要持續給包裹的FlexboxLayout添加子項,並且在需要的時候自動換行。與這種場景非常相似的是相冊,因爲所有的照片尺寸相同,或者是一張表內都是尺寸均勻的CardView。這種情況你只需要獲取相關行數和列數(依賴flowDirection)。似乎這種情況是最明顯使用FlexboxLayout的地方,但是這僅僅是在0.1.2版本上,所以以後可能有更多的內容。

在Google IO 2016大會上,一個閃亮的全新佈局被髮布,即ConstraintLayout,看起來遠不止是安卓app需要的特徵豐富的工具。我將在以後進一步討論ConstraintLayout。
FlexboxLayout介紹到此結束。它是值得關注的,雖然它現在並沒有比已有的佈局在性能和功能上更具優勢。FlexboxLayout需要調整自己來縮小它與其他佈局之間的距離,以便它更加值得關注。

原文鏈接
安卓開發進階之彈性佈局FlexboxLayout–Part1(翻譯)
安卓開發進階之彈性佈局FlexboxLayout–Part2(翻譯)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章