HarmonyOS中ArkUI的Column、Row、Flex、Stack,及其常用属性学习记录

鸿蒙的 ArkUI 框架通过多种容器组件实现灵活布局,包括 Column (纵向布局)、Row (横向布局)、Flex (弹性布局)和 Stack (层叠布局)。 其中 ColumnRow 为线性布局,效率相对较高,在开发过程中,可以根据布局特点选择适当的组件。


一、Column 与 Row:线性布局

功能

  • Column 沿垂直方向排列子组件,主轴为纵向,交叉轴为横向。
  • Row 沿水平方向排列子组件,主轴为横向,交叉轴为纵向。

开发过程中,核心要考虑主轴交叉轴 ,区分出主轴交叉轴,在设计布局时更得心应手。

常用属性

  1. 主轴对齐(justifyContent)

    • FlexAlign.Start(默认):子组件从主轴起点排列。
    • FlexAlign.Center:居中对齐。
    • FlexAlign.End:子组件从主轴结束点排列。
    • FlexAlign.SpaceBetween:子组件均匀分布,首尾顶格。
    • FlexAlign.SpaceEvenly:子组件及首尾间距均等。
  2. 交叉轴对齐(alignItems)

    • Column 中为 HorizontalAlign(水平对齐),如 Start(左对齐)、Center(居中)、End(右对齐)。
    • Row 中为 VerticalAlign(垂直对齐),如 Top(顶部对齐)、Center(垂直居中)。
  3. 间距控制(space)

    • 设置子组件在主轴方向的间距,如 Row({ space: 20 }) 使水平排列的组件间隔 20vp。

示例代码

typescript 复制代码
// Column 垂直居中排列,子组件间隔20vp
Column({ space: 20 }) {
  Text('Item 1').width('90%').height(40)
  Text('Item 2').width('90%').height(40)
}
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center)

以上仅用于参考,在DevEco-Studio中可以利用编辑器的代码提示功能,直接选择适合布局的属性即可。

二、Flex:弹性布局

功能

  • 继承自 ColumnRow,支持更灵活的排列方向(如反向排列)和动态尺寸分配。
  • 可结合Expanded组件按比例分配剩余空间。

核心属性

  1. 排列方向(flexDirection)

    • FlexDirection.Row(水平)、RowReverse(水平反向)。
    • FlexDirection.Column(垂直)、ColumnReverse(垂直反向)。
  2. 换行控制(flexWrap)

    • FlexWrap.NoWrap:默认不自动换行。
    • FlexWrap.Wrap:子组件超出容器宽度时自动换行。
    • FlexWrap.WrapReverse:反向换行,从底部开始排列。
  3. 权重分配(flex)

    • 通过 Expandedflex 属性分配比例空间,如 Expanded(flex: 2) 占两倍剩余空间。

示例代码

typescript 复制代码
// Flex 横向排列,子组件按比例分配空间
Flex({ direction: FlexDirection.Row }) {
  Expanded(flex: 1, child: Text('Item 1').backgroundColor(0xAFEEEE))
  Expanded(flex: 2, child: Text('Item 2').backgroundColor(0x00FFFF))
}
.width('90%')
.justifyContent(FlexAlign.SpaceEvenly)

三、Stack:层叠布局

功能

  • 子组件按添加顺序层叠显示,常用于浮动按钮、弹窗或重叠元素。

常用属性

  1. 对齐方式(alignContent)

    • Alignment.TopStart(左上对齐)、Alignment.Center(居中)。
    • 可自定义偏移量,如 Alignment(0.5, 0.8) 定位到容器中下区域。
  2. 子组件定位(position)

    • 通过 position 属性设置绝对定位,如 { x: 10, y: 20 }

示例代码

typescript 复制代码
// Stack 层叠布局,文字居中,按钮右下角浮动
Stack() {
  Text('背景内容').fontSize(20)
  Button('悬浮按钮')
    .width(60)
    .height(60)
    .position({ x: '90%', y: '80%' }) // 相对父容器定位
}
.width('100%').height(200)

四、通用布局约束属性

以下属性适用于所有容器组件:

  • matchParent :组件尺寸匹配父容器(如 .width('100%'))。
  • wrapContent:尺寸根据内容自适应。
  • margin :设置外边距,如 .margin({ top: 20 }的)
  • padding :设置内边距,如 .padding({ top: 20 })

五、应用场景与优化建议

  1. 响应式布局

    • 使用 FlexExpanded 按比例分配空间,适配不同屏幕尺寸。
    • spacejustifyContent 实现动态间距调整。
  2. 性能优化

    • 减少嵌套层级,优先使用 Row/Column 替代多层 Flex
    • 对长列表使用 LazyForEach 懒加载,避免内存溢出。
  3. 复杂交互

    • Stack 结合动画实现弹窗动态弹出效果。
    • FlexflexWrap 支持多行排列,适用于瀑布流布局。

总结归纳

  • Column/Row 适用于简单线性排列,justifyContentalignItems 控制对齐。
  • Flex 提供更灵活的排列方向和动态尺寸分配,适合复杂布局。
  • Stack 用于层叠元素,结合定位实现悬浮效果。

后续会继续学习,总结分享。

相关推荐
怀男孩3 小时前
鸿蒙NEXT开发之开屏广告实现
华为·harmonyos
MardaWang4 小时前
HarmonyOS开发,解决Kill server failed 报错问题
华为·harmonyos
冬冬小圆帽4 小时前
鸿蒙编译器安装运行教程
华为·harmonyos
李坤6 小时前
鸿蒙-封装吸边可拖拽视图
harmonyos·arkts·arkui
别说我什么都不会6 小时前
OpenHarmony源码分析之分布式软总线:authmanager模块(1)/设备认证连接管理
分布式·操作系统·harmonyos
二流小码农7 小时前
鸿蒙开发:远场通信服务rcp会话问题
android·ios·harmonyos
SuperHeroWu78 小时前
【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解
华为·app·harmonyos·鸿蒙·har·hsp·hap
Bruce_Liuxiaowei9 小时前
HarmonyOS Next~HarmonyOS应用开发工具之AppGallery Connect
华为·harmonyos
东林知识库9 小时前
鸿蒙NEXT项目实战-百得知识库05
华为·harmonyos
别说我什么都不会10 小时前
OpenHarmony源码分析之分布式软总线:os_adapter模块解析
分布式·harmonyos