鸿蒙UI开发核心:ArkUI布局组件详解(一) 原创
头像 ●VON 2025-11-22 18:13:47    发布
5157 浏览 147 点赞 0 收藏

前言

在鸿蒙应用开发中,用户界面(UI)是连接用户与功能的桥梁。而构建美观、响应式的界面,离不开对布局系统的深入理解。ArkUI 作为鸿蒙官方推荐的声明式 UI 框架,提供了简洁而强大的布局能力。其中,Column(列布局)、Row(行布局)和 Stack(层叠布局) 是最基础、最常用的三大布局容器。

本文将通过详细讲解这三种布局组件的核心属性、使用规则和典型场景,并结合实际案例演示如何组合它们来构建真实页面结构,帮助你打下坚实的 UI 开发基础。


一、布局理念:声明式 + 弹性盒模型

ArkUI 采用声明式语法,开发者只需描述“UI 应该是什么样子”,框架会自动处理渲染和更新。其布局机制借鉴了现代 Web 的弹性盒(Flexbox)思想,强调:

  • 方向性(主轴与交叉轴)
  • 对齐方式
  • 间距控制
  • 尺寸自适应

下面,我们逐一解析三大布局组件。



二、Column:垂直列布局

Column 将子组件从上到下垂直排列,适用于列表、表单、卡片等纵向结构。

核心属性

属性说明常用值
space子组件之间的间距number(如 10
alignItems子组件在水平方向(交叉轴)的对齐方式StartCenterEnd
width / height容器尺寸'100%'200'auto'

示例:用户信息卡片

Column() {
  Text('张三')
    .fontSize(24)
    .fontWeight(FontWeight.Bold)

  Text('HarmonyOS 开发者')
    .fontSize(16)
    .fontColor('#666')

  Button('关注')
    .margin({ top: 10 })
}
.width('100%')
.height(150)
.alignItems(HorizontalAlign.Center) // 水平居中
.space(8) // 子元素间距 8px
.backgroundColor('#f5f5f5')
.borderRadius(12)
.padding(16)
✅ 适用场景:个人主页、设置项列表、消息流等垂直内容。


三、Row:水平行布局

Row 将子组件从左到右水平排列,常用于工具栏、标签、图标+文字组合等。

核心属性

属性说明
space子组件间距
alignItems子组件在垂直方向(交叉轴)的对齐方式

示例:底部导航栏

Row() {
  Column() {
    Image($r('app.media.home_icon'))
      .width(24)
      .height(24)
    Text('首页').fontSize(12)
  }
  .alignItems(HorizontalAlign.Center)

  Column() {
    Image($r('app.media.message_icon'))
      .width(24)
      .height(24)
    Text('消息').fontSize(12)
  }
  .alignItems(HorizontalAlign.Center)

  Column() {
    Image($r('app.media.profile_icon'))
      .width(24)
      .height(24)
    Text('我的').fontSize(12)
  }
  .alignItems(HorizontalAlign.Center)
}
.width('100%')
.height(60)
.justifyContent(FlexAlign.SpaceBetween) // 主轴两端对齐
.padding({ horizontal: 30 })
.backgroundColor('#fff')
.borderTop({ width: 1, color: '#eee' })
💡 技巧:justifyContent(FlexAlign.SpaceBetween) 可让三个按钮均匀分布在左右两端和中间。
✅ 适用场景:操作按钮组、评分星标、商品价格+促销标签等。


四、Stack:层叠布局

Stack 将子组件按顺序堆叠在同一区域,后添加的组件覆盖在前一个之上。非常适合实现遮罩、悬浮按钮、图片+角标等效果。

核心特性

  • 默认所有子组件左上角对齐
  • 可通过 alignContent 控制整体对齐;
  • 子组件可通过 .position() 精确定位(绝对定位)。

示例:带“NEW”角标的商品图

Stack() {
  // 背景图片
  Image($r('app.media.product_img'))
    .width(120)
    .height(120)
    .borderRadius(8)

  // 角标(右上角)
  Text('NEW')
    .fontSize(10)
    .fontColor(Color.White)
    .backgroundColor('#ff4d4f')
    .padding({ left: 4, right: 4 })
    .borderRadius(4)
    .position({ x: 80, y: 8 }) // 相对于 Stack 左上角偏移
}
.width(120)
.height(120)
✅ 适用场景: 图片水印/角标 悬浮操作按钮(FAB) 弹窗遮罩层 游戏 HUD 界面


五、组合实战:构建一个“新闻卡片”

现在,我们将综合运用 ColumnRowStack 构建一个完整的新闻卡片:

Column() {
  // 标题与摘要
  Column() {
    Text('鸿蒙生态迎来新突破')
      .fontSize(18)
      .fontWeight(FontWeight.Bold)
      .maxLines(2)
      .textOverflow({ overflow: TextOverflow.Ellipsis })

    Text('华为宣布 HarmonyOS NEXT 将全面支持原生应用...')
      .fontSize(14)
      .fontColor('#666')
      .margin({ top: 6 })
      .maxLines(2)
      .textOverflow({ overflow: TextOverflow.Ellipsis })
  }
  .layoutWeight(1) // 占据剩余空间

  // 底部信息栏
  Row() {
    Text('科技频道')
      .fontSize(12)
      .fontColor('#999')

    Text('2小时前')
      .fontSize(12)
      .fontColor('#999')
      .layoutWeight(1) // 自动撑开,实现右对齐
      .textAlign(TextAlign.End)
  }
  .margin({ top: 12 })
}
.width('100%')
.height(140)
.padding(12)
.backgroundColor('#fff')
.borderRadius(10)
.shadow({ radius: 8, color: '#00000010' })
🔍 布局解析: 外层 Column 垂直组织标题、摘要和底部信息; 底部 Row 中使用 layoutWeight(1) 实现“科技频道”左对齐、“2小时前”右对齐; 整体卡片具备圆角、阴影、内边距等视觉细节。


六、常见问题与最佳实践

❓ 为什么子组件没按预期对齐?

  • 检查是否设置了 width('100%')height('100%')
  • 确认 alignItems 方向是否正确(Column 的交叉轴是水平,Row 是垂直)。

❓ 如何让某个子组件占据剩余空间?

  • 使用 .layoutWeight(1)(类似 Flex 的 flex: 1)。

✅ 推荐实践:

  • 优先使用 Column/Row 组合,避免过度嵌套;
  • 层叠效果优先考虑 Stack,而非绝对定位;
  • 复杂布局可拆分为多个自定义组件,提升可读性。


七、小结

今天我们深入学习了 ArkUI 的三大基础布局组件:

  • Column:垂直排列,适合列表与卡片;
  • Row:水平排列,适合工具栏与标签;
  • Stack:层叠覆盖,适合角标与悬浮元素。

掌握它们的属性与组合方式,你已经能够构建大多数常见页面结构。接下来,我们将继续学习 Flex 布局、Grid 网格、Scroll 容器 等进阶布局能力,让你的 UI 更加灵活强大。

🛠️ 动手练习建议: 用 Column + Row 实现一个聊天消息气泡; 用 Stack 实现一个带播放按钮的视频封面; 组合三种布局,构建一个“商品详情页”头部区域。

打好布局基础,你的鸿蒙 UI 开发之路将更加顺畅!

©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
OpenHarmony

暂无评论数据

发布

头像

●VON

HarmonyOS应用开发者初级工程师、影刀初级RPA工程师、YashanDB数据库V23.2认证管理员、金仓数据库认证专员等技能证书,主持参与省级团队赛9项,个人赛2项均获得省级荣誉,其中2025年作为负责人带领团队斩获“挑战杯”全国大学生课外学术科技作品竞赛河南省省级一等奖。

26

帖子

0

提问

257

粉丝

关注
最新发布

鸿蒙实战:打造跨设备音乐播放器

2025-11-25 16:23:11    发布
热门推荐
地址:北京市朝阳区北三环东路三元桥曙光西里甲1号第三置业A座1508室 商务内容合作QQ:2291221 电话:13391790444或(010)62178877
版权所有:电脑商情信息服务集团 北京赢邦策略咨询有限责任公司
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,我司致力于保护作者版权,如有侵权,请与我司联系删除
京ICP备:2022009079号-2
京公网安备:11010502051901号
ICP证:京B2-20230255