Jetpack Compose 提供了多个布局容器,可帮助您构建和排列界面组件。虽然 Row 和 Column 等基本布局可组合项可以处理简单的排列,但随着屏幕尺寸的变化和用户数据的增长,许多应用需要更具自适应性的容器解决方案。
布局容器包括:
- 延迟列表和延迟网格:
LazyColumn、LazyRow和LazyVerticalGrid等组件,仅通过组合和布局当前在视口中可见的项,高效显示大型或动态大小的数据集。 - 分页器:
HorizontalPager和VerticalPager等容器,可让用户在内容页面之间滑动或滚动。 - 流式布局:自适应一维容器(
FlowRow和FlowColumn),当空间不足时,会自动将溢出的项换行或换列。 - 网格:一种灵活的二维结构,可在多列或多行布局中显示内容,并根据容器大小进行调整。
- FlexBox:一种受 CSS Flexbox 启发的自适应容器,可让您精细控制内容如何沿主轴和交叉轴换行、放大、缩小和对齐,以填充可用空间。
选择正确的布局容器
在 Compose 中构建布局时,选择基本布局容器还是更高级的布局容器取决于您的设计、空间受限时内容项是否必须换行,以及内容项如何动态调整大小。
下表总结了每个 Compose 1D 布局容器的功能:
容器 |
将内容换行显示 |
逐项增长 |
单件商品损耗 |
单件商品初始尺寸 |
内容会放大以填充多行中的可用空间 |
重新排列内容 |
延迟加载 |
适用场景: |
行 / 列 |
❌ |
✅(通过 |
❌ |
❌ |
❌ |
❌ |
❌ |
|
FlowRow / FlowColumn |
✅ |
受限 |
❌ |
❌ |
部分 |
❌ |
❌ |
|
LazyRow / LazyColumn |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
✅ |
|
FlexBox |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
❌ |
|
下表总结了 Grid 和其他类似可组合项的功能:
容器 |
严格 2D 匹配 |
项跨度(列) |
项目跨度(行) |
延迟加载 |
适用场景: |
网格 |
✅ |
✅(通过 |
✅ |
❌ |
|
LazyVerticalGrid |
✅ |
✅(通过 |
❌ |
✅ |
|
LazyStaggeredGrid |
❌(仅限 1D) |
部分(仅限全跨度) |
❌ |
✅ |
|
LazyHorizontalGrid |
✅ |
❌ |
✅ |
✅ |
|
合并行和列 |
❌ |
❌ |
❌ |
❌ |
|