安卓开发进阶之弹性布局FlexboxLayout--Part2(翻译)

时间:2022-08-05 17:46:14

原文链接
安卓开发进阶之弹性布局FlexboxLayout–Part1(翻译)
安卓开发进阶之弹性布局FlexboxLayout–Part3(翻译)
app在Google Play Store(需要*,也可自己导入Github上的工程后自己运行)
Github上的地址
源码下载地址

这篇文章主要讨论子views如何放置在FlexboxLayout中。
之前我们看到了FlexboxLayout的许多属性是如何控制子views的排列和放置的,下面我们继续。所有的安卓布局将它们自己的LayoutParams应用到它们的子布局,该LayoutParams指定子布局的属性,这些属性对父布局是明确的,但是FlexboxLayout却不同。更多的是这些子属性增加FlexboxLayout的威力。

开始之前,有点值得注意的是在app中长按子view能够进去item 模式。一旦进入该模式,轻触其他子view可以选中并且设置其属性。

layout_order

layout_order用来控制子view的顺序。默认情况下,所有view的layout_order值为1,并且根据在XML布局中出现的顺序进行排列(假如布局文件从XML中加载),或者根据被添加到父布局的顺序进行排列。我没有将此属性写入app,因为它无需解释。

layout_flexGrow

layout_flexGrow与LinearLayout的 weights属性很类似,布局中任何剩余的空间将被按比例划分,该比例就是每个子view的layout_flexGrow属性值。该属性默认值为0.0,即控件的测量尺寸。
安卓开发进阶之弹性布局FlexboxLayout--Part2(翻译)
Flex Grow

layout_flexShrink
layout_flexShrink与layout_flexGrow完全相反,当FlexboxLayout的flexWrap属性值为No Wrap并且子view的测量宽度超过了父布局的尺寸的时候使用layout_flexShrink属性,根据layout_flexShrink的值对子view进行压缩。该属性默认值为1.0,能压缩所有的子view,而如果某个子view的该属性值被设置为0后就不会被压缩了。
安卓开发进阶之弹性布局FlexboxLayout--Part2(翻译)
Flex Shrink

layout_alignSelf
纵观FlexboxLayout的属性,我们看到两个令人混淆的属性,alignItems 和alignContent,这两个属性既对子项自己生效,又对包含这些子项的虚拟线生效。确实存在第三个align属性,layout_alignSelf,其用于单个的子view,并且能够让这些子view重写父布局的alignItem设置。该属性默认值为Auto,作用为继承父布局属性,其他值为flex_start, flex_end, center, baseline和stretch。
安卓开发进阶之弹性布局FlexboxLayout--Part2(翻译)
Align Self: Flex Start

安卓开发进阶之弹性布局FlexboxLayout--Part2(翻译)
Align Self: Flex End

安卓开发进阶之弹性布局FlexboxLayout--Part2(翻译)
Align Self: Center

安卓开发进阶之弹性布局FlexboxLayout--Part2(翻译)
Align Self: Baseline

安卓开发进阶之弹性布局FlexboxLayout--Part2(翻译)
Align Self: Stretch

layout_flexBasisPercent
最后一个属性是layout_flexBasisPercent,它类似于PercentLayout。默认值为-1.0,意味着不使用任何百分比尺寸。但是0.0-1.0之间的值成为子view在父布局的占比,并且值1.0表示子view与父布局一样大。
安卓开发进阶之弹性布局FlexboxLayout--Part2(翻译)
Flex Basis Percent: Setting a child to 0.5 makes it 50% the width of the parent.

下一篇文章也就是最后一篇文章,采用一个更多的“食谱”方式,并且探索如何将布局与子属性结合到一起来满足我们的真正需求。

安卓开发进阶之弹性布局FlexboxLayout–Part1(翻译)
安卓开发进阶之弹性布局FlexboxLayout–Part3(翻译)

app在Google Play Store(需要*,也可自己导入Github上的工程后自己运行)
Github上的地址
源码下载地址