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

news2025/7/13 15:09:56

本文聚焦于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内容持续更新中........

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2339593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试基础笔记第七天

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、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的开源工具,它专注于将多种形式的内容智能转换成…

Python 深度学习实战 第11章 自然语言处理(NLP)实例

Python 深度学习实战 第11章 自然语言处理(NLP)实例 内容概要 第11章深入探讨了自然语言处理(NLP)的深度学习应用,涵盖了从文本预处理到序列到序列学习的多种技术。本章通过IMDB电影评论情感分类和英西翻译任务,详细介绍了如何使…

将 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(脚手架)③.创建项目&#xff08…

嵌入式C语言位操作的几种常见用法

作为一名老单片机工程师,我承认,当年刚入行的时候,最怕的就是看那些密密麻麻的寄存器定义,以及那些让人眼花缭乱的位操作。 尤其是遇到那种“明明改了寄存器,硬件就是不听话”的情况,简直想把示波器砸了&am…

基于Djiango实现中药材数据分析与可视化系统

中药材数据分析与可视化系统 项目截图 登录 注册 首页 药材Top20 药材价格 产地占比 历史价格 新闻资讯 后台管理 一、项目概述 中药材数据分析与可视化系统是一个基于Django框架开发的专业Web应用,致力于对各类中药材数据进行全面、系统的采集、分析和可视化展示…

stm32(gpio的四种输出)

其实GPIO这个片上外设的功能: 用于控制IO引脚。 CPU就如同大脑,而这些片上外设就如同四肢一样的关系 如图 —————————————————————————————— OK类比了以上 其实GPIO是有 八种工作模式的 这八种工作模式 因为GPIO是面向IO…

Zookeeper 可观测性最佳实践

Zookeeper 介绍 ZooKeeper 是一个开源的分布式协调服务,用于管理和协调分布式系统中的节点。它提供了一种高效、可靠的方式来解决分布式系统中的常见问题,如数据同步、配置管理、命名服务和集群管理等。本文介绍通过 DataKit 采集 Zookeeper 指标&#…

微信小程序三种裁剪动画有效果图

效果图 .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语言笔记(鹏哥)上课板书+课件汇总(结构体)-----数据结构常用

结构体 目录&#xff1a; 1、结构体类型声明 2、结构体变量的创建和初始化 3、结构体成员访问操作符 4、结构体内存对齐*****&#xff08;重要指数五颗星&#xff09; 5、结构体传参 6、结构体实现位段 一、结构体类型声明 其实在指针中我们已经讲解了一些结构体内容了&…

git清理--解决.git文件过大问题

背景&#xff1a;为什么.git比我仓库中的文件大很多 为什么我的git中只有一个1KB的README&#xff0c;但是.git却又1G多&#xff1f;当我想把这个git库push到gitee时&#xff0c;还会报错&#xff1a; 根据报错信息&#xff0c;可看出失败的原因是&#xff1a;有文件的大小超过…

Jetson Orin NX 部署YOLOv12笔记

步骤一.创建虚拟环境 conda create -n yolov12 python3.8.20 注意&#xff1a;YOLOv12/YOLOv11/YOLOv10/YOLOv9/YOLOv8/YOLOv7a/YOLOv5 环境通用 步骤二.激活虚拟环境 conda activate yolov12 #激活环境 步骤三.查询Jetpack出厂版本 Jetson系列平台各型号支持的最高Jetp…

微服务2--服务治理与服务调用

前言 &#xff1a;本文主要阐述微服务架构中的服务治理&#xff0c;以及Nacos环境搭建、服务注册、服务调用&#xff0c;负载均衡以及Feign实现服务调用。 服务治理 服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。 服务注册&#xff1a;在…

C语言之高校学生信息快速查询系统的实现

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 C语言之高校学生信息快速查询系统的实现 目录 任务陈述与分析 问题陈述问题分析 数据结构设…

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…

【网络篇】从零写UDP客户端/服务器:回显程序源码解析

大家好呀 我是浪前 今天讲解的是网络篇的第四章&#xff1a;从零写UDP客户端/服务器&#xff1a;回显程序源码解析 从零写UDP客户端/服务器&#xff1a;回显程序源码解析 UDP 协议特性​核心类介绍​ UDP的socket应该如何使用&#xff1a;1: DatagramSocket2: DatagramPacket回…

MATLAB 控制系统设计与仿真 - 38

多变量系统控制器设计实例1 考虑如下给出的多变量系统模型&#xff1a; 考虑混合灵敏度问题&#xff0c;引入加权矩阵&#xff1a; 设计鲁棒控制器&#xff0c;并绘制闭环系统的阶跃响应曲线及开环系统的奇异值曲线。 MATLAB代码如下&#xff1a; clear all;clc; stf(s); g1…

[密码学实战]详解gmssl库与第三方工具兼容性问题及解决方案

[密码学实战]详解gmssl库与第三方工具兼容性问题及解决方案 引言 国密算法&#xff08;SM2/SM3/SM4&#xff09;在金融、政务等领域广泛应用&#xff0c;但开发者在集成gmssl库实现SM2签名时&#xff0c;常遇到与第三方工具&#xff08;如OpenSSL、国密网关&#xff09;验证不…