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值。
更多属性或功能去官网查看,本案例但愿对各位有那么帮助。
因为代码太多,就不一一贴出来了,直接下载便可, 源码点击下载