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

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

2. 自适应缩放 —— layoutWeight

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. 百分比布局 —— 固定占比

Row() {
  Column().width('20%').backgroundColor(0xF5DEB3)
  Column().width('50%').backgroundColor(0xD2B48C)
  Column().width('30%').backgroundColor(0xF5DEB3)
}

📏 固定宽度比例:始终为 2:5:3,响应屏幕变化
🖼️ 图示:[%%] [%%%%%] [%%%]

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

✅ 垂直滚动(Column + Scroll)
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)
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/百分比):根据场景选择合适方式实现跨设备兼容性。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小风华~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值