当前位置: 首页 > news >正文

鸿蒙ArkUI采用声明式布局体系,所有页面都遵循「一个根布局,根布局内可嵌套多层子布局」的规则,下面为你逐个讲解常用布局:

垂直布局Column

Column是最常用的垂直排列容器,所有子元素会沿着垂直方向从上到下依次排列,可以通过属性控制对齐方式和元素间距,非常适合做页面的根容器、表单列表排列。

属性‌:

  • space

    :设置所有子元素之间的统一间距

  • justifyContent

    :控制子元素在‌垂直方向‌的对齐方式,常用值:Start(顶部对齐,默认)、Center(居中对齐)、End(底部对齐)、SpaceBetween(均匀分布,首尾不留空)、SpaceAround(均匀分布,首尾留半空)

  • alignItems

    :控制子元素在‌水平方向‌的对齐方式,常用值:Start(左对齐)、Center(居中对齐)、End(右对齐)

代码示例:

@Entry
@Component
struct VerticalDemo {
build() {
Column({ space: 10 }) {
Text("第一条内容")
.fontSize(20)
.width('100%')
.backgroundColor('#f0f0f0')
Text("第二条内容")
.fontSize(20)
.width('100%')
.backgroundColor('#e0e0e0')
Text("第三条内容")
.fontSize(20)
.width('100%')
.backgroundColor('#f0f0f0')
}
.width('100%')
.padding(15)
.alignItems(HorizontalAlign.Start)

}
}

垂直布局示例代码运行效果图:


水平布局Row

Row是水平排列容器,所有子元素会沿着水平方向从左到右依次排列,适合做顶部导航栏、按钮组、横向表单项目排列。

属性‌:

  • space

    :设置所有子元素之间的统一水平间距

  • justifyContent

    :控制子元素在‌水平方向‌的对齐方式,取值和Column一致

  • alignItems

    :控制子元素在‌垂直方向‌的对齐方式,常用值:Top(顶部对齐)、Center(居中对齐)、Bottom(底部对齐)

代码示例:

@Entry
@Component
struct HorizontalDemo {
build() {
Row({ space: 12 }) { // 水平排列,元素间距12vp
Button("首页")
Button("分类")
Button("我的")
}
.width('100%')
.height(50)
.backgroundColor('#fff')
.justifyContent(FlexAlign.Center) // 水平居中排列
.alignItems(VerticalAlign.Center) // 垂直居中对齐
}
}

水平布局对齐方式示例效果图


相对布局RelativeContainer

相对布局是自由度极高的布局方式,允许子组件‌基于父容器,或者其他子组件设置对齐规则‌来确定位置,非常适合实现复杂的不规则页面布局,是鸿蒙开发中处理复杂界面的核心布局。

用法‌:

  • 给每个需要定位的子组件设置唯一id

  • 通过alignRules配置对齐规则:可以设置left(左边缘对齐)、right(右边缘对齐)、top(上边缘对齐)、bottom(下边缘对齐),规则内容为anchor: '组件id'表示对齐到对应组件的对应边缘

代码示例:

@Entry
@Component
struct RelativeDemo {
build() {
RelativeContainer() {
// 床1:靠左上角
Text("1号床")
.size({width: 100, height: 100})
.backgroundColor(Color.Pink)
.alignRules({
left: {anchor: '__container__', align: RelativeAlign.Left},
top: {anchor: '__container__', align: RelativeAlign.Top}
})
.id("bed1")

// 床2:床1的右侧,顶部和床1对齐
Text("2号床")
.size({width: 100, height: 100})
.backgroundColor(Color.Blue)
.alignRules({
left: {anchor: 'bed1', align: RelativeAlign.Right},
top: {anchor: 'bed1', align: RelativeAlign.Top}
})
.id("bed2")
}
.size({width: '100%', height: 400})
.padding(10)
}
}

__container__代表根容器自身,代表对齐到父容器)

相对布局宿舍床位示例运行效果图


层叠布局Stack

Stack是层叠容器,子组件会按照代码顺序‌依次堆叠‌,后面写的组件会覆盖在前面的组件上方,非常适合实现「图片上飘文字」、「卡片角标」、「悬浮按钮」这类需要叠加元素的场景。

属性‌:

  • alignContent

    :设置所有子元素整体的对齐方式

  • 支持给子元素单独设置position,做绝对定位

代码示例:

@Entry
@Component
struct StackDemo {
build() {
Stack({ alignContent: Alignment.BottomEnd }) {
// 底层:卡片内容
Column() {
Text("课程卡片")
.fontSize(18)
}
.width('90%')
.height(200)
.backgroundColor(Color.White)
.borderRadius(12)

// 上层:悬浮按钮,叠在右下角
Button("+")
.width(40)
.height(40)
.borderRadius(20)
.margin({ right: 10, bottom: 10 })
}
.width('100%')
.height(250)
.padding(10)
}
}

层叠布局悬浮按钮示例运行效果图


5. 弹性布局Flex

Flex是流式弹性布局,相比Row/Column更灵活,支持设置换行,自动分配子元素空间,非常适合实现标签流、不规则网格、响应式排列这类场景。

属性‌:

  • direction

    :设置主轴方向(水平还是垂直排列)

  • wrap

    :设置是否换行,FlexWrap.Wrap代表自动换行,超出主轴宽度自动切到下一行,实现流式布局

  • justifyContent

    alignItems:和Row/Column类似,控制主轴和交叉轴的对齐方式

代码示例:

@Entry
@Component
struct FlexDemo {
build() {
Flex({ wrap: FlexWrap.Wrap, space: { mainAxis: 10, crossAxis: 10 } }) {
// 多个标签自动换行
Text("鸿蒙开发")
.padding({ left: 12, right: 12, top: 6, bottom: 6 })
.backgroundColor('#e0f0ff')
.borderRadius(16)
Text("ArkTS")
.padding({ left: 12, right: 12, top: 6, bottom: 6 })
.backgroundColor('#e0f0ff')
.borderRadius(16)
Text("布局学习")
.padding({ left: 12, right: 12, top: 6, bottom: 6 })
.backgroundColor('#e0f0ff')
.borderRadius(16)
// 更多标签...
}
.padding(15)
}
}

弹性布局标签按钮流式排列效果图

http://www.jsqmd.com/news/1111080/

相关文章:

  • 2026免费AI抠图工具完整指南:电脑手机网页离线软件汇总
  • lu、穿梭视频分析系统 避暗实验视频分析系统 大鼠穿梭实验箱 穿梭避暗实验箱
  • WorkshopDL:终极Steam创意工坊下载器,无需Steam也能获取海量游戏模组
  • Awesome-EarthObservation-Code:遥感代码资源的合集
  • Fable助力打造音乐可视化工具Waveloop:呈现独特音乐结构,代码与视频皆有亮点
  • 毕业设计 深度学习植物识别与网络动态可视化系统(源码+论文)
  • PhotoGIMP:Photoshop用户的终极免费替代方案,3分钟实现零成本迁移
  • 3行代码搞定页面截图,Bun.WebView真的简单
  • 好的,这是一个符合您所有要求的CSDN标题:GEO服务技术解析与行业应用
  • Loop Engineering 实战拆解:Andrew Ng的三大产品开发循环如何让AI Agent真正“造对”产品
  • WordPress+WooCommerce跨境电商独立站主题选择与维护
  • Playnite:免费开源的多平台游戏库管理器终极解决方案
  • 摸清AI下属的特性,让他向你汇报工作
  • APKMirror安卓客户端:如何安全获取历史版本APK的终极指南
  • 用ChatGPT批量处理Excel数据,真的不用写一行代码?——2024最新Prompt工程实战手册(含12类财务/HR/销售场景)
  • 终极指南:如何用gdsdecomp轻松解密Godot游戏资源
  • 15个VTube Studio插件开发工具:从零开始打造虚拟主播互动体验
  • 第09章:Docker Compose 编排
  • C++23新特性在CLion中的实战体验:从语法糖到生产力提升
  • 如何准确研判企业技术需求,避免伪需求和低效匹配?
  • 2026Word文档压缩实操指南:带图文文档轻量化、官方瘦身完整操作教程
  • 10分钟搞定Joy-Con手柄连接电脑:从蓝牙配到游戏畅玩的完整方案
  • CentOS 7.9 64位 PostgreSQL安装和配置指南
  • 2026多端AI抠图工具指南:免费付费网页电脑手机软件实操教程
  • 杰理之获取设备总数【篇】
  • 【BMS上位机UI(C#)】
  • 如何利用AI图像分层工具将单张插画秒变PSD分层文件:设计师的终极效率革命
  • StepCI:统一API测试框架,高效覆盖HTTP与GraphQL协议
  • 计算机Java毕设实战-基于 SpringBoot 的高校学生部门资料归档管理系统的设计与实现 校园学生会组织活动运维管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 2026免费音频转文字工具全解:电脑手机在线离线工具实操指南