鸿蒙ArkUI之布局实战,线性布局(Column,Row)、弹性布局(Flex)、层叠布局(Stack),详细用法
本文聚焦于ArkUI的布局实战,三种十分重要的布局,线性布局、弹性布局、层叠布局,在实际开发过程中这几种布局方法都十分常见,下面直接上手
线性布局
垂直布局(Column)
官方文档:
Column-行列与堆叠-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者
沿垂直方向布局的容器,在此容器中,所有子组件都会沿着垂直方向排列,也就数从上往下排
参数表:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| space | string | number | 否 | 纵向布局元素垂直方向间距。 从API version 9开始,space为负数或者justifyContent设置为FlexAlign.SpaceBetween、FlexAlign.SpaceAround、FlexAlign.SpaceEvenly时不生效。 默认值:0 单位:vp 说明: 可选值为大于等于0的数字,或者可以转换为数字的字符串。 |
代码部分:
在垂直布局中,有两个十分重要的属性:
| 属性名 | 功能描述 | 参数类型 | 参数说明 | 默认值 |
|---|---|---|---|---|
| alignItems | 设置子组件在水平方向上的对齐 | HorizontalAlign | 子组件在水平方向上的对齐格式 | HorizontalAlign.Center |
| justifyContent | 设置子组件在垂直方向上的对齐 | FlexAlign | 子组件在垂直方向上的对齐格式 | FlexAlign.Start |
import { getRandomRGBA } from '../../../Utils'@Entry
@Component
struct ColumnCase {build() {NavDestination() {Column({ space: 30 }) {Text('垂直布局').fontSize(24).fontWeight(FontWeight.Bold)Column({ space: 10 }) {ForEach(Array.from({ length: 10 }), () => {Text().backgroundColor(getRandomRGBA()).width(200).height(20)})}.justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)}.height('100%').width('100%')}}
}@Builder
function ColumnCaseBuilder() {ColumnCase()
}
可以看到在背景色部分我使用了一个函数生成随机的颜色,这个函数如下:
// 随机生成rgba颜色
export const getRandomRGBA = () => {const r = Math.floor(Math.random() * 256);const g = Math.floor(Math.random() * 256);const b = Math.floor(Math.random() * 256);return `rgba(${r}, ${g}, ${b}, ${1})`;
}
效果展示:

水平布局(Row)
官方文档:
Row-行列与堆叠-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者
沿水平方向布局容器,这个组件中的子组件会沿着水平方向排列,参数表:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| space | number | string | 否 | 横向布局元素间距。 从API version 9开始,space为负数或者justifyContent设置为FlexAlign.SpaceBetween、FlexAlign.SpaceAround、FlexAlign.SpaceEvenly时不生效。 默认值:0,单位vp 说明: 可选值为大于等于0的数字,或者可以转换为数字的字符串。 |
代码部分:
在水平布局容器中也有两个十分重要的属性:
| 属性名 | 功能描述 | 参数类型 | 是否必填 | 参数说明 | 默认值 |
|---|---|---|---|---|---|
| alignItems | 设置子组件在垂直方向上的对齐 | VerticalAlign | 是 | 子组件在垂直方向上的对齐格式 | VerticalAlign.Center |
| justifyContent | 设置子组件在水平方向上的对齐 | FlexAlign | 是 | 子组件在水平方向上的对齐格式 | FlexAlign.Start |
import { getRandomRGBA } from '../../../Utils'@Entry
@Component
struct RowCase {build() {NavDestination() {Column({ space: 30 }) {Text('水平布局').fontSize(24).fontWeight(FontWeight.Bold)Row({ space: 10 }) {ForEach(Array.from({ length: 20 }), () => {Text().backgroundColor(getRandomRGBA()).width(40).height(200)})}.justifyContent(FlexAlign.Center).alignItems(VerticalAlign.Center)}.height('100%').width('100%')}}
}@Builder
function RowCaseBuilder() {RowCase()
}
效果展示:

弹性布局(Flex)
官方文档:
Flex-行列与堆叠-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者
Flex是以弹性方式布局子组件的容器组件,提供更加有效的方式对容器内的子元素进行排列、对齐和分配剩余空间,也就是子组件会随着容器宽度的限制而自动换行,不会挤在一块,但是使用的时候需要加上一个参数使用,才能达到换行的效果,就是:
Flex({ wrap: FlexWrap.Wrap }) // 设置这个参数之后才有换行效果
参数表:
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| direction | FlexDirection | 否 | 子组件在Flex容器上排列的方向,即主轴的方向。 默认值: FlexDirection.Row 卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| wrap | FlexWrap | 否 | Flex容器是单行/列还是多行/列排列。 默认值: FlexWrap.NoWrap 说明: 在多行布局时,通过交叉轴方向,确认新行堆叠方向。 卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| justifyContent | FlexAlign | 否 | 所有子组件在Flex容器主轴上的对齐格式。 默认值: FlexAlign.Start 卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| alignItems | ItemAlign | 否 | 所有子组件在Flex容器交叉轴上的对齐格式。 默认值: ItemAlign.Start 卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| alignContent | FlexAlign | 否 | 交叉轴中有额外的空间时,多行内容的对齐方式。仅在wrap为Wrap或WrapReverse下生效。 默认值: FlexAlign.Start 卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| space12+ | FlexSpaceOptions12+ | 否 | 所有子组件在Flex容器主轴或交叉轴的间距。 默认值: {main:LengthMetrics.px(0), cross:LengthMetrics.px(0)} space为负数、百分比或者justifyContent设置为FlexAlign.SpaceBetween、FlexAlign.SpaceAround、FlexAlign.SpaceEvenly时不生效。 元服务API: 从API version 12开始,该接口支持在元服务中使用。 |
代码部分:
在以下代码中第一个Flex组件没有设置Wrap参数,子组件就会直接默认水平排列,而第二个Flex设置了Wrap参数,子组件就可以自动换行:
import { getRandomRGBA } from '../../../Utils'@Entry
@Component
struct FlexCase {build() {NavDestination() {Column({ space: 30 }) {Text('弹性布局').fontSize(24).fontWeight(FontWeight.Bold)Flex() {ForEach(Array.from({ length: 10 }), () => {Text().backgroundColor(getRandomRGBA()).width(60).margin({ right: 20, bottom: 20 }).height(30)})}Flex({ wrap: FlexWrap.Wrap }) {ForEach(Array.from({ length: 10 }), () => {Text().backgroundColor(getRandomRGBA()).width(60).margin({ right: 20, bottom: 20 }).height(30)})}}.height('100%').width('100%')}}
}@Builder
function FlexCaseBuilder() {FlexCase()
}
效果展示:

层叠布局(Stack)
官方文档:
Stack-行列与堆叠-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者
Stack组件中的子组件会堆叠在一起,默认都是居中对齐,遵循后来居上的原则,如果需要设置层级,可给子组件设置zIndex(数字)属性,数字越大,层级越高,
参数表:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| alignContent | Alignment | 否 | 设置子组件在容器内的对齐方式。 默认值:Alignment.Center |
Stack组件设置组件对齐的方式有两种,一种是通过参数设置:
Stack(value?: { alignContent?: Alignment })
第二种是通过属性设置:
Stack(){
// 子组件...
}
.alignContent(Alignment.Center)
两种方式都选一种即可,对齐方式分为九种,如下:
| 对齐位置 | 枚举值 | 说明 |
|---|---|---|
| 左上 | Alignment.TopStart | 左上角对齐 |
| 上边居中 | Alignment.Top | 上边居中对齐 |
| 右上 | Alignment.TopEnd | 右上角对齐 |
| 左边居中 | Alignment.Start | 左边居中对齐 |
| 中心 | Alignment.Center | 中心对齐 |
| 右边居中 | Alignment.End | 右边居中对齐 |
| 左下 | Alignment.BottomStart | 左下角对齐 |
| 下边居中 | Alignment.Bottom | 下边居中对齐 |
| 右下 | Alignment.BottomEnd | 右下角对齐 |
如图:
代码部分:
这里一共有三个Stack组件,第一个小图在左上,第二个默认都居中,第三个在右下,一共放了两张图片,一个在占满,一个显示位置
@Entry
@Component
struct StackCase {build() {NavDestination() {Text('层叠布局').fontSize(24).fontWeight(FontWeight.Bold)Column({ space: 20 }) {Stack({ alignContent: Alignment.TopStart }) {Image($r('app.media.ark_ui')).width(200).height(200)Image($r('app.media.avatar')).width(30).height(30)}.width(200).height(200)Stack() {Image($r('app.media.ark_ui')).width(200).height(200)Image($r('app.media.avatar')).width(30).height(30)}.width(200).height(200)Stack({ alignContent: Alignment.BottomEnd }) {Image($r('app.media.ark_ui')).width(200).height(200)Image($r('app.media.avatar')).width(30).height(30)}.width(200).height(200)}.height('100%').width('100%')}}
}@Builder
function StackCaseBuilder() {StackCase()
}
效果展示:

ArkUI内容持续更新中........
相关文章:
鸿蒙ArkUI之布局实战,线性布局(Column,Row)、弹性布局(Flex)、层叠布局(Stack),详细用法
本文聚焦于ArkUI的布局实战,三种十分重要的布局,线性布局、弹性布局、层叠布局,在实际开发过程中这几种布局方法都十分常见,下面直接上手 线性布局 垂直布局(Column) 官方文档: Column-行列…...
测试基础笔记第七天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、cat命令二、ls -al命令三、>重定向符号四、>>追加重定向符号五、less/more命令六、grep命令七、|管道符八、clear命令九、head命令十、tail命令十一、…...
[Windows] Adobe Camera Raw 17.2 win/Mac版本
[Windows] Adobe Camera Raw 链接:https://pan.xunlei.com/s/VOOIAXoyaZcKAkf_NdP-qw_6A1?pwdpd5k# Adobe Camera Raw,支持Photoshop,lightroom等Adobe系列软件,对相片无损格式进行编辑调色。 支持PS LR 2022 2023 2024 2025版…...
开源模型应用落地-Podcastfy-从文本到声音的智能跃迁-Gradio(一)
一、前言 在当今信息呈现方式越来越多样化的背景下,如何将文字、图片甚至视频高效转化为可听的音频体验,已经成为内容创作者、教育者和研究者们共同关注的重要话题。Podcastfy是一款基于Python的开源工具,它专注于将多种形式的内容智能转换成…...
深入剖析 Java Web 项目序列化:方案选型与最佳实践
在 Java Web 开发中,“序列化”是一个你无法绕过的概念。无论是缓存数据、共享 Session,还是进行远程过程调用(RPC)或消息传递,序列化都扮演着底层数据搬运工的角色。它负责将内存中的 Java 对象转换成可传输或可存储的…...
Python 深度学习实战 第11章 自然语言处理(NLP)实例
Python 深度学习实战 第11章 自然语言处理(NLP)实例 内容概要 第11章深入探讨了自然语言处理(NLP)的深度学习应用,涵盖了从文本预处理到序列到序列学习的多种技术。本章通过IMDB电影评论情感分类和英西翻译任务,详细介绍了如何使…...
零基础上手Python数据分析 (19):Matplotlib 高级图表定制 - 精雕细琢,让你的图表脱颖而出!
写在前面 —— 超越默认样式,掌握 Matplotlib 精细控制,打造专业级可视化图表 上一篇博客,我们学习了 Matplotlib 的基础绘图功能,掌握了如何绘制常见的折线图、柱状图、散点图和饼图,并进行了基本的图表元素定制,例如添加标题、标签、图例等。 这些基础技能已经能让我…...
将 DeepSeek 集成到 Spring Boot 项目实现通过 AI 对话方式操作后台数据
文章目录 项目简介本项目分两大模块 GiteeMCP 简介环境要求项目代码核心实现代码MCP 服务端MCP 客户端 DeepSeek APIDockersse 连接ws 连接(推荐)http 连接 vue2-chat-windowCherry Studio配置模型配置 MCP调用 MCP 项目简介 在本项目中,我们…...
《前端面试题之 Vue 篇(第三集)》
目录 1、 nvm的常用命令①.Node.js 版本与 npm 版本的对应关系②Vue2 与 Vue3 项目的 Node.js 版本分界线③版本管理实践建议 2、Vue2 项目搭建(基于 vue-cli Webpack)① 环境准备② 安装 Vue CLI(脚手架)③.创建项目(…...
PHP实现图片自动添加水印效果
<?php // 设置原始图片路径和水印图片路径 $original_image original.jpg; $watermark_image watermark.png;// 创建图片资源 $original imagecreatefromjpeg($original_image); $watermark imagecreatefrompng($watermark_image);// 获取图片尺寸 $original_width im…...
嵌入式C语言位操作的几种常见用法
作为一名老单片机工程师,我承认,当年刚入行的时候,最怕的就是看那些密密麻麻的寄存器定义,以及那些让人眼花缭乱的位操作。 尤其是遇到那种“明明改了寄存器,硬件就是不听话”的情况,简直想把示波器砸了&am…...
基于Djiango实现中药材数据分析与可视化系统
中药材数据分析与可视化系统 项目截图 登录 注册 首页 药材Top20 药材价格 产地占比 历史价格 新闻资讯 后台管理 一、项目概述 中药材数据分析与可视化系统是一个基于Django框架开发的专业Web应用,致力于对各类中药材数据进行全面、系统的采集、分析和可视化展示…...
stm32(gpio的四种输出)
其实GPIO这个片上外设的功能: 用于控制IO引脚。 CPU就如同大脑,而这些片上外设就如同四肢一样的关系 如图 —————————————————————————————— OK类比了以上 其实GPIO是有 八种工作模式的 这八种工作模式 因为GPIO是面向IO…...
系统架构设计师:计算机组成与体系结构(如CPU、存储系统、I/O系统)案例分析与简答题、详细解析与评分要点
计算机组成与体系结构 10道案例分析与简答题 案例分析题(5道) 1. Cache映射与主存编址计算 场景:某计算机系统采用32位地址总线,主存容量为4GB,Cache容量为512KB,块大小为64B,使用4路组相联映射…...
Zookeeper 可观测性最佳实践
Zookeeper 介绍 ZooKeeper 是一个开源的分布式协调服务,用于管理和协调分布式系统中的节点。它提供了一种高效、可靠的方式来解决分布式系统中的常见问题,如数据同步、配置管理、命名服务和集群管理等。本文介绍通过 DataKit 采集 Zookeeper 指标&#…...
位运算---总结
位运算 基础 1. & 运算符 : 有 0 就是 0 2. | 运算符 : 有 1 就是 1 3. ^ 运算符 : 相同为0 相异为1 and 无进位相加位运算的优选级 不用在意优先级,能加括号就加括号给一个数 n ,确定它的二进制位中第 x 位是 0 还是 1? 规定: 题中所说的第x位指:int 在32位机器下4个…...
2. 什么是最普通的自动化“裸奔状态”?
什么是最普通的自动化"裸奔状态"?从大厂案例看测试代码的生存困境 一个典型的"裸奔代码"示例 # 打开目标网站 driver.get(http://test-site.com/login-page)# 登录操作 driver.find_element_by_id(user).send_keys(tester) driver.find_eleme…...
头歌java课程实验(函数式接口及lambda表达式)
第1关:利用lambda表达式对Book数组按多个字段进行排序 任务描述 本关任务:利用Comparator接口完成对Book数组同时按多个字段进行排序。 编程要求 1、本任务共有三个文件,可查看各文件的内容 2、无需修改SortBy.java枚举文件及Book.java类文…...
微信小程序三种裁剪动画有效果图
效果图 .wxml <image class"img inset {{status?action1:}}" src"{{src}}" /> <image class"img circle {{status?action2:}}" src"{{src}}" /> <image class"img polygon {{status?action3:}}" src&quo…...
C语言笔记(鹏哥)上课板书+课件汇总(结构体)-----数据结构常用
结构体 目录: 1、结构体类型声明 2、结构体变量的创建和初始化 3、结构体成员访问操作符 4、结构体内存对齐*****(重要指数五颗星) 5、结构体传参 6、结构体实现位段 一、结构体类型声明 其实在指针中我们已经讲解了一些结构体内容了&…...
git清理--解决.git文件过大问题
背景:为什么.git比我仓库中的文件大很多 为什么我的git中只有一个1KB的README,但是.git却又1G多?当我想把这个git库push到gitee时,还会报错: 根据报错信息,可看出失败的原因是:有文件的大小超过…...
Jetson Orin NX 部署YOLOv12笔记
步骤一.创建虚拟环境 conda create -n yolov12 python3.8.20 注意:YOLOv12/YOLOv11/YOLOv10/YOLOv9/YOLOv8/YOLOv7a/YOLOv5 环境通用 步骤二.激活虚拟环境 conda activate yolov12 #激活环境 步骤三.查询Jetpack出厂版本 Jetson系列平台各型号支持的最高Jetp…...
微服务2--服务治理与服务调用
前言 :本文主要阐述微服务架构中的服务治理,以及Nacos环境搭建、服务注册、服务调用,负载均衡以及Feign实现服务调用。 服务治理 服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。 服务注册:在…...
Arduino示例代码讲解:Project 08 - Digital Hourglass 数字沙漏
Arduino示例代码讲解:Project 08 - Digital Hourglass 数字沙漏 Project 08 - Digital Hourglass 数字沙漏程序功能概述功能:硬件要求:输出:代码结构全局变量`setup()` 函数`loop()` 函数计时和点亮LED:读取倾斜开关状态:重置LED和计时器:运行过程注意事项Project 08 - …...
python生成项目依赖文件requirements.txt
文章目录 通过pip freeze去生成通过pipreqs去生成 通过pip freeze去生成 pip freeze > requirements.txt会将整个python的Interceptor的环境下lib包下所有的依赖都生成到这个文件当中,取决于我们使用的python的版本下所有的安装包。不建议使用这种方式ÿ…...
C语言之高校学生信息快速查询系统的实现
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 C语言之高校学生信息快速查询系统的实现 目录 任务陈述与分析 问题陈述问题分析 数据结构设…...
精益数据分析(7/126):打破创业幻想,拥抱数据驱动
精益数据分析(7/126):打破创业幻想,拥抱数据驱动 在创业的道路上,我们都怀揣着梦想,但往往容易陷入自我编织的幻想中。我希望通过和大家一起学习《精益数据分析》,能帮助我们更清醒地认识创业过…...
Spring Boot 项目中发布流式接口支持实时数据向客户端推送
1、pom依赖添加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>2、事例代码 package com.pojo.prj.controller;import com.pojo.common.core.utils.String…...
Ubuntu安装MySQL步骤及注意事项
一、安装前准备 1. 系统更新:在安装 MySQL 之前,确保你的 Ubuntu 系统软件包是最新的,这能避免因软件包版本问题导致的安装错误,并获取最新的安全补丁。打开终端,执行以下两条命令: sudo apt update sudo …...
【网络篇】从零写UDP客户端/服务器:回显程序源码解析
大家好呀 我是浪前 今天讲解的是网络篇的第四章:从零写UDP客户端/服务器:回显程序源码解析 从零写UDP客户端/服务器:回显程序源码解析 UDP 协议特性核心类介绍 UDP的socket应该如何使用:1: DatagramSocket2: DatagramPacket回…...
