
回复
HarmonyOS Next的ArkUI 5.0通过声明式布局引擎,为开发者提供高效的多设备适配能力。以下为三大核心布局容器的定位与场景:
容器类型 | 布局方向 | 典型场景 |
Column | 垂直排列(主轴=Y轴) | 表单、纵向列表、信息卡片 |
Row | 水平排列(主轴=X轴) | 导航栏、横向滚动、按钮组 |
Grid | 二维网格(行+列) | 相册、商品展示、仪表盘 |
Column() {
Text('标题').fontSize(20)
Text('副标题').fontColor('#666')
Button('确认').width(100)
}
.height('100%')
.backgroundColor('#FFF')
.padding(20)
关键属性:
space
:子组件间距(如.space(10)
设置10px纵向间距)alignItems
:交叉轴对齐(HorizontalAlign.Start/Center/End)Column() {
// 顶部导航栏
Row() { ... }
// 内容区域
Scroll() {
Column() {
Image($r('app.media.banner'))
Text('正文内容...')
}
}
// 底部按钮
Row() { ... }
}
Row() {
Text('标签').flexGrow(1) // 占据剩余空间
Button('操作').flexShrink(0) // 禁止压缩
}
.justifyContent(FlexAlign.SpaceBetween)
弹性布局属性:
flexGrow
:扩展比例flexShrink
:收缩比例flexBasis
:基准尺寸Scroll() {
Row() {
ForEach(this.tabs, (tab) => {
Text(tab.name)
.padding(10)
.borderRadius(15)
})
}
}
.scrollable(ScrollDirection.Horizontal)
Grid() {
ForEach(this.items, (item) => {
GridItem() {
Image(item.url)
}
})
}
.columnsTemplate('1fr 1fr 1fr') // 3等分列
.rowsGap(15)
.columnsGap(10)
参数说明:
columnsTemplate
:列宽定义(支持repeat(3, '1fr')
简写)rowsTemplate
:行高定义Grid() {
// ...
}
.breakpoint({
'width < 600px': { columnsTemplate: '1fr' }, // 手机单列
'width >= 600px': { columnsTemplate: '1fr 1fr' } // 平板双列
})
主轴对齐(justifyContent) :
Column() { ... } .justifyContent(FlexAlign.Center) // 主轴居中
可选值:
交叉轴对齐(alignItems) :
Row() { ... } .alignItems(VerticalAlign.Center) // 垂直居中
全局间距系统:
// 使用预设间距变量
Column() { ... }
.padding($r('app.float.page_margin')) // 从资源文件读取
自定义间距:
Row() { ... } .margin({ top: 10, bottom: 20 }) .width('100%')
在DevEco Studio中启用调试模式:
Column() { ... }
.debugLine(true) // 显示布局边框(仅开发环境生效)
FlexLayout
替代复杂Row/Column
组合LazyForEach
延迟加载