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

来源:互联网 发布:ubuntu ntp服务器设置 编辑:程序博客网 时间:2024/04/30 07:06

原文链接
安卓开发进阶之弹性布局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(翻译)

原创粉丝点击