FlexboxLayout是一個Android平臺上與CSS的 Flexible box 彈性盒子佈局模塊 有類似功能的庫。Flexbox 是CSS 的一種佈局方案,能夠簡單、快捷的實現複雜佈局。android
FlexboxLayout項目開源地址:https://github.com/google/flexbox-layoutgit
效果如圖下:github
項目中添加依賴app
compile 'com.google.android:flexbox:0.2.2'
flexDirection屬性決定了主軸的方向,即FlexboxLayout裏子Item的排列方向,有如下四種取值:佈局
<com.google.android.flexbox.FlexboxLayout android:id="@+id/flexbox_layout4" android:layout_width="match_parent" android:layout_height="119dp" android:layout_marginTop="9dp" app:flexDirection="column">
.................
flexWrap 這個屬性決定Flex 容器是單行仍是多行,而且決定副軸(與主軸垂直的軸)的方向。可能有如下3個值:測試
<com.google.android.flexbox.FlexboxLayout android:id="@+id/flexbox_layout" android:layout_width="match_parent" android:layout_height="wrap_content" app:flexWrap="wrap" >
...............
justifyContent 屬性控制元素主軸方向上的對齊方式,有如下5種取值:flex
<com.google.android.flexbox.FlexboxLayout android:id="@+id/flexbox_layout2" android:layout_width="match_parent" android:layout_height="wrap_content" app:justifyContent="space_between" >
............
alignItems 屬性控制元素在副軸方向的對齊方式,有如下5種取值:google
<com.google.android.flexbox.FlexboxLayout android:id="@+id/flexbox_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="9dp" app:alignItems="flex_start">
..........................
alignContent 屬性控制多根軸線的對齊方式(也就是控制多行,若是子元素只有一行,則不起做用(針對多行元素),表示控件在副軸上的對齊方向,默認值爲stretch,表示佔滿整個副軸,由於上文中我把FlexboxLayout的高度設置爲包裹內容,因此這個屬性你們可能沒看到效果,這裏我把FlexboxLayout的高度改成match_parent,可能有如下6種取值:flexbox
<com.google.android.flexbox.FlexboxLayout android:id="@+id/flexbox_layout" android:layout_width="match_parent" android:layout_height="match_parent" app:alignContent="flex_start" app:flexWrap="wrap" app:alignItems="center" >
..............
layout_order
屬性能夠改變子元素的排列順序,默認狀況下,FlexboxLayout子元素的排列是按照xml文件中出現的順序。默認值爲1,值越小排在越靠前。spa
layout_flexGrow
子元素的放大比例, 決定如何分配剩餘空間(若是存在剩餘空間的話),默認值爲0,不會分配剩餘空間,若是有一個item的 layout_flexGrow
是一個正值,那麼會將所有剩餘空間分配給這個Item,若是有多個Item這個屬性都爲正值,那麼剩餘空間的分配按照layout_flexGrow
定義的比例(有點像LinearLayout
的layout_weight
屬性)。
layout_flexShrink
:子元素縮小比例,當空間不足時,子元素須要縮小(設置了換行則無效),默認值爲1,若是全部子元素的layout_flexShrink
值爲1,空間不足時,都等比縮小,若是有一個爲0,其餘爲1,空間不足時,爲0的不縮小,負值無效。
layout_alignSelf
屬性能夠給子元素設置對齊方式,上面講的alignItems
屬性能夠設置對齊,這個屬性的功能和alignItems
同樣,只不過alignItems
做用於全部子元素,而 layout_alignSelf
做用於單個子元素。默認值爲auto, 表示繼承alignItems
屬性,若是爲auto之外的值,則會覆蓋alignItems
屬性。有如下6種取值:
除了auto
之外,其餘和alignItems
屬性同樣。
layout_flexBasisPercent
的值爲一個百分比,表示設置子元素的長度爲它父容器長度的百分比,若是設置了這個值,那麼經過這個屬性計算的值將會覆蓋layout_width
或者layout_height
的值。可是須要注意,這個值只有設置了父容器的長度時纔有效(也就是MeasureSpec mode 是 MeasureSpec.EXACTLY)。默認值時-1。
強制限制 FlexboxLayout的子元素(寬或高)不會小於最小值,無論layout_flexShrink
這個屬性的值爲多少,子元素不會被縮小到小於設置的這個最小值。
這個和上面的恰好相反,強制限制FlexboxLayout子元素不會大於這個最大值, 無論layout_flexGrow
的值爲多少,子元素不會被放大到超過這個最大值。
layout_wrapBefore
屬性控制強制換行,默認值爲false,若是將一個子元素的這個屬性設置爲true,那麼這個子元素將會成爲一行的第一個元素。這個屬性將忽略flex_wrap
設置的 noWrap值。
更多屬性或功能去官網查看,本案例但願對各位有那麼幫助。
因爲代碼太多,就不一一貼出來了,直接下載便可, 源碼點擊下載