鉴于这一特性,让我们想象一个场景:您想要按序放置视图,但当可用空间改变时(由于不同的设备、屏幕方向更改或由于进入多窗口模式导致的界面重绘等因素),便不得不把它们移动到新行。
△ Nexus 5X 设备:纵向视图
△ Nexus 5X 设备:横向视图
△ Pixel C 设备:多窗口模式,分隔线在左边
△ Pixel C 设备:多窗口模式,分隔线在中间
△ Pixel C 设备:多窗口模式,分隔线在右边
如果您使用传统的 LinearLayout 或 RelativeLayout 等布局方式,需要定义多个 DP-bucket 布局(例如 layout-600dp,layout-720dp,layout-1020dp)来处理各种屏幕尺寸。但上面的对话框只使用了一个 FlexboxLayout 就实现了。
这个示例使用了上面提到的 flexWrap=“wrap" 属性:
这样子视图会自动换到新行,而不会从父级容器中溢出,如下图所示:
另外一个需要强调的做法就是将 layout_flexGrow 属性设置到一个独立的子项上。这有助于在有可用空间剩余时优化最终布局的观感。layout_flexGrow 属性的运作原理类似于 LinearLayout 中的 layout_weight 属性。这意味着 FlexboxLayout 将根据 layout_flexGrow 设置的值,为同一行中的每个子项分配剩余空间 。
在下面的示例中,它假设每个子项的 layout_flexGrow 属性的值设为 1,那么剩余空间将均匀分配到每个子项。