Android FlexBoxLayout 彈性盒子佈局
前言
FlexBoxLayout是谷歌前幾年開源的一個控制元件,使用起來很方便。顧名思義他是一個彈性的、可伸縮的佈局,應用場景也有很多,如:搜尋頁的搜尋歷史標籤流式展示;動態新增view等。
前段時間專案中正好有用到此佈局,特地總結一下。
使用方法
1.build.gradle(app)中新增依賴
implementation 'com.google.android:flexbox:1.1.0'
2.佈局中就可以直接引用了
<com.google.android.flexbox.FlexboxLayout android:layout_width="match_parent" android:layout_height="match_parent"> </com.google.android.flexbox.FlexboxLayout>
控制佈局屬性
一、flexDirection 該屬性控制佈局方向,其值有4個:
1.row 設定方向為水平方向,起點在左側(預設值) 2.row-reverse 設定方向為水平方向,起點在右側 3.column 設定方向為垂直方向,起點在頂部 4.column-reverse 設定方向為垂直方向,起點在底部
二、flexWrap 該屬性控制佈局是否換行,其值有3個:
1.nowrap 設定為不換行 2.wrap 正常方向換行3.wrap-reverse 反方向換行
三、justifyContent 該屬性控制佈局的對齊方式,其值有5個:
1.flex-start 左對齊(預設值) 2.flex-end 右對齊 3.center 居中對齊 4.space-between 兩端對齊 5.space-around 間隔相等對齊,相當於LinerLayout中的weight屬性
四、alignContent 多行對齊方式(單行不起作用),其值有6個:
1.flex-start 左對齊 2.flex-end 右對齊 3.center 居中對齊 4.space-between 兩端對齊5.space-around 間隔相等對齊,相當於LinerLayout中的weight屬性 6.stretch 充滿布局的高度,需要alignItems的值也為stretch才生效(預設值)
五、alignItems 反向對齊方式(例如當前佈局是橫向的,那麼alignItems則是設定縱向對齊方式),其值有5個:
1.flex-start 左對齊 2.flex-end 右對齊 3.center 居中對齊 4.baseline 第一行內容的基線對齊 5.stretch 如果item沒設定高度,則自動充滿布局(預設值)
控制子元素屬性
一、layout_order 該屬性可以改變子元素的排列順序,預設值是1
二、layout_flexGrow 該屬性空著子元素的放大比例
三、layout_flexShrink 該屬性控制子元素縮小比例
四、layout_alignSelf 該屬性控制子元素的對齊方式,跟上面佈局屬性alignItems基本上是一樣,唯一區別是layout_alignSelf可以設定單個子元素,而alignItems設定的全部子元素。其值有6個:
1.flex-start 左對齊 2.flex-end 右對齊 3.center 居中對齊 4.baseline 第一行內容的基線對齊 5.stretch 如果item沒設定高度,則自動充滿布局 6.auto 自動,如果值為auto則會繼承alignItems,反之則會覆蓋(預設值)
五、layout_flexBasisPercent 該屬性為子元素的長度跟他父佈局的一個百分比,設定完此屬性會覆蓋父佈局寬或高,但父佈局只有設定了長度時此屬性才會生效。
六、layout_minWidth、layout_minHeight 該屬性會強制子元素不會小於最小值,設定完layout_flexShrink(縮小比例)也不會超過最小值。
七、layout_maxWidth、layout_maxHeight 該屬性會強制子元素不會小於最大值,設定完layout_flexGrow(放大比例)也不會超過最大值。
八、layout_wrapBefore 該屬性會控制子元素強制換行,預設值是false,如果設定為true,則當前子元素不受flex_wrap(換行屬性)的控制。