HarmonyOS:线性布局(Row/Column)

✅ 概述总结

线性布局是界面开发中最基础、最常用的布局方式,通过 Row(水平)和 Column(垂直)容器实现子元素的有序排列。它支持灵活的对齐、间距设置与自适应布局,适用于构建结构清晰的 UI。

🧭 核心概念一览表

概念 说明
主轴 子元素排列方向: • Row → 水平(➡️) • Column → 垂直(⬇️)
交叉轴 与主轴垂直的方向: • Row → 垂直 • Column → 水平
space 设置主轴上相邻子元素之间的等间距
justifyContent 主轴对齐方式(6种)
alignItems 交叉轴对齐方式(Start / Center / End)
alignSelf 单个子元素覆盖 alignItems 的对齐设置
Blank 自动填充主轴空白空间,实现拉伸效果
layoutWeight 按权重分配主轴剩余空间
百分比宽度 固定占比,响应不同屏幕尺寸

🔖 主轴对齐方式:justifyContent

对齐方式 图解示意 说明
FlexAlign.Start 🔳 🔳 🔳 ⠀⠀→ 起始端对齐,首个元素贴边
FlexAlign.Center → 🔳 🔳 🔳 ← 居中对齐,前后留白相等
FlexAlign.End ← 🔳 🔳 🔳 尾部对齐,末尾元素贴边
SpaceBetween 🔳 🔳 🔳 首尾贴边,中间间距均等
SpaceAround ⠀ 🔳 🔳 🔳 元素周围间距相等,首尾为半距
SpaceEvenly 🔳 🔳 🔳 所有间距完全一致(含首尾)

🎯 交叉轴对齐方式:alignItems

容器类型 对齐属性 图解 说明
Column (主轴: 垂直) HorizontalAlign.Start ← 🔳 🔳 🔳 左对齐
HorizontalAlign.Center 🔳 🔳 🔳 水平居中
HorizontalAlign.End 🔳→ 🔳 🔳 右对齐
Row (主轴: 水平) VerticalAlign.Top 🔳 🔳 🔳 ↑ 顶部对齐
VerticalAlign.Center 🔳 🔳 🔳 ↓ 垂直居中
VerticalAlign.Bottom ↓ 🔳 🔳 🔳 底部对齐

💡 alignSelf 可单独设置某子元素的对齐方式,优先级高于 alignItems

🌟 自适应布局三大技巧

1. 自适应拉伸 ------ 使用 Blank

TypeScript 复制代码
Row() {
  Text('Bluetooth')
  Blank() // 自动填充空白
  Toggle({ type: ToggleType.Switch })
}
.width('100%')

2. 自适应缩放 ------ layoutWeight

TypeScript 复制代码
Row() {
  Column().layoutWeight(1).backgroundColor(0xF5DEB3)
  Column().layoutWeight(2).backgroundColor(0xD2B48C)
  Column().layoutWeight(3).backgroundColor(0xF5DEB3)
}.height('30%')

📊 比例分配主轴空间: 1:2:3 → 占比分别为 1/6, 2/6, 3/6

🖼️ 图示:[🔳] [███] [█████](按权重扩展)

3. 百分比布局 ------ 固定占比

TypeScript 复制代码
Row() {
  Column().width('20%').backgroundColor(0xF5DEB3)
  Column().width('50%').backgroundColor(0xD2B48C)
  Column().width('30%').backgroundColor(0xF5DEB3)
}

📏 固定宽度比例:始终为 2:5:3,响应屏幕变化

🖼️ 图示:[%%] [%%%%%] [%%%]

4. 自适应延伸 ------ 滚动支持

✅ 垂直滚动(Column + Scroll)
TypeScript 复制代码
Scroll(this.scroller) {
  Column() {
    ForEach(this.arr, (item) => {
      Text(item.toString()).width('90%').height(150).margin({ top: 10 })
    })
  }
}
.scrollable(ScrollDirection.Vertical)
.scrollBar(BarState.On)
.edgeEffect(EdgeEffect.Spring)
✅ 水平滚动(Row + Scroll)
TypeScript 复制代码
Scroll(this.scroller) {
  Row() {
    ForEach(this.arr, (item) => {
      Text(item.toString()).height('90%').width(150).margin({ left: 10 })
    })
  }
}
.scrollable(ScrollDirection.Horizontal)

📌 支持滚动条常驻、颜色、宽度及回弹效果设置。

📚 知识点详解

  • 主轴与交叉轴:主轴决定排列方向,交叉轴用于对齐控制。理解二者关系是布局核心。

  • justifyContent 与 alignItems:分别控制主轴和交叉轴对齐行为,影响整体布局结构。

  • 自适应策略(Blank/layoutWeight/百分比):根据场景选择合适方式实现跨设备兼容性。

⚠️ 提示:避免过度嵌套以提升性能,合理使用边界约束与渲染优化语法。

相关推荐
国服第二切图仔2 小时前
鸿蒙 Next 如何使用 AVRecorder 从0到1实现视频录制功能(ArkTS)
华为·音视频·harmonyos
lqj_本人2 小时前
configureFlutterEngine引擎配置详解
鸿蒙
全球通史4 小时前
鸿蒙开发之鸿蒙应用深色模式适配完整指南(上架过程之适配手机深色模式)
华为·harmonyos
一叶难遮天11 小时前
快速入门HarmonyOS应用开发(一)
harmonyos·arkts·arkui·navigation·鸿蒙开发·鸿蒙5.0
lqj_本人13 小时前
FlutterPlugin接口实现与插件架构设计
鸿蒙
爱笑的眼睛1115 小时前
HarmonyOS Web组件深度解析:构建高性能JavaScript交互的实践与创新
华为·harmonyos
特立独行的猫a15 小时前
HarmonyOS黑马云音乐项目:全场景在线音乐播放的实现与优化
华为·harmonyos·黑马云音乐
Industio_触觉智能17 小时前
开源鸿蒙SIG-Qt技术沙龙成都站成功举办,产品方案展示
qt·harmonyos·openharmony·开源鸿蒙·sig-qt
Android疑难杂症17 小时前
一文讲清鸿蒙网络开发
前端·javascript·harmonyos