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

鸿蒙ArkUI之布局实战,线性布局(Column,Row)、弹性布局(Flex)、层叠布局(Stack),详细用法

本文聚焦于ArkUI的布局实战,三种十分重要的布局,线性布局、弹性布局、层叠布局,在实际开发过程中这几种布局方法都十分常见,下面直接上手

线性布局

垂直布局(Column)

官方文档: 

Column-行列与堆叠-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者

 沿垂直方向布局的容器,在此容器中,所有子组件都会沿着垂直方向排列,也就数从上往下排

 参数表:

参数名类型必填说明
spacestring | 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开发者

沿水平方向布局容器,这个组件中的子组件会沿着水平方向排列,参数表:

参数名类型必填说明
spacenumber | 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 }) // 设置这个参数之后才有换行效果

参数表:

名称类型必填说明
directionFlexDirection

子组件在Flex容器上排列的方向,即主轴的方向。

默认值: FlexDirection.Row

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

wrapFlexWrap

Flex容器是单行/列还是多行/列排列。

默认值: FlexWrap.NoWrap

说明:

在多行布局时,通过交叉轴方向,确认新行堆叠方向。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

justifyContentFlexAlign

所有子组件在Flex容器主轴上的对齐格式。

默认值: FlexAlign.Start

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

alignItemsItemAlign

所有子组件在Flex容器交叉轴上的对齐格式。

默认值: ItemAlign.Start

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

alignContentFlexAlign

交叉轴中有额外的空间时,多行内容的对齐方式。仅在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(数字)属性,数字越大,层级越高, 

参数表:

参数名类型必填说明
alignContentAlignment

设置子组件在容器内的对齐方式。

默认值: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内容持续更新中........

相关文章:

  • C语言 —— 铭纹织构未诞之镜 - 预处理详解
  • AIGC通信架构深度优化指南
  • 【Qt】QMainWindow类
  • leetcode 1035. Uncrossed Lines
  • css3新特性第三章(文本属性)
  • AI Agent破局:智能化与生态系统标准化的颠覆性融合!
  • 【技术派后端篇】Redis实现统计计数
  • JavaScript 性能优化
  • 【数据分析实战】使用 Matplotlib 绘制散点图
  • 第一讲 生成式ai是什么
  • 深度解析算法之前缀和
  • Linux命令-Shell编程
  • 深入剖析 Java Web 项目序列化:方案选型与最佳实践
  • k8s 基础入门篇之开启 firewalld
  • 低代码行业研究报告
  • ClickHouse简介
  • AI日报 - 2025年04月19日
  • 网络基础(协议,地址,OSI模型、Socket编程......)
  • Linux网络编程 TCP---并发服务器:多进程架构与端口复用技术实战指南
  • GO语言入门:常用数学函数2
  • 独家丨远洋渔船船长被害案嫌犯移送检方报捕,船上两段视频曝光
  • 上海崇明“人鸟争食”何解?检察机关推动各方寻找最优解
  • 观察|中日航线加速扩容,航空公司如何抓住机会?
  • 老年人越“懒”越健康,特别是这5种“懒”
  • “特朗普的欧洲耳语者”:梅洛尼白宫之行真能打破美欧关税僵局?
  • 美国防部宣布整合驻叙美军部队,将减少至不足千人