首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >七、ArkTS 声明式UI-常用布局-弹性布局(Flex)

七、ArkTS 声明式UI-常用布局-弹性布局(Flex)

作者头像
Harry技术
发布于 2025-01-13 10:57:36
发布于 2025-01-13 10:57:36
29300
代码可运行
举报
运行总次数:0
代码可运行

ArkUI 弹性布局(Flex)-官方文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-layout-development-flex-layout-V5

1. 概述

弹性布局(Flex)的效果类似于线性布局(Column/Row),也会使子元素呈线性排列,但是弹性布局在子元素的排列、对齐和剩余空间的分配等方面更加灵活。

2. 参数

Flex组件的参数定义如下,下面逐一介绍每个属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Flex(value?: { direction?: FlexDirection, justifyContent?: FlexAlign, alignItems?: ItemAlign, wrap?: FlexWrap, alignContent?: FlexAlign })
2.1. 布局方向(dirction)

dirction用于设置Flex容器的布局方向,即子元素的排列方向,其类型FlexDirection为枚举类型,可选的枚举值如下

名称

Row

RowReverse

Column

ColumnReverse

描述

水平方向,元素从左到右排列

水平方向,元素从右到左排列

垂直方向,元素从上到下排列

垂直方向,元素从下到上排列

效果

Flex容器中也有主轴交叉轴两个概念,其中主轴方向与direction一致,交叉轴与主轴垂直,具体方向如下

direction

Row

RowReverse

Column

ColumnReverse

主轴和交叉轴

img

基本概念

  • 主轴:Flex组件布局方向的轴线,子元素默认沿着主轴排列。主轴开始的位置称为主轴起始点,结束位置称为主轴结束点。
  • 交叉轴:垂直于主轴方向的轴线。交叉轴开始的位置称为交叉轴起始点,结束位置称为交叉轴结束点。
2.2. 主轴排列方式(justifyContent)

justifyContent参数的作用同Column/Row容器的justifyContent()完全相同,也是用于设置子元素在主轴方向的排列方式,其类型同样为FlexAlign,可选的枚举值如下

名称

描述

效果(以direction=Row为例)

Start

分布在起始端

Center

居中

End

分布在结束端

SpaceBetween

均匀分布,首尾两项两端对齐,中间元素等间距分布

SpaceAround

均匀分布,所有子元素两侧都留有相同的空间

SpaceEvenly

均匀分布,所有子元素之间以及首尾两元素到两端的距离都相等

2.3. 交叉轴对齐方式(alignItems)

alignItems参数的作用同Column/Row容器的alignItems()相同,也是用于设置子元素在交叉轴的对齐方式。但该参数的类型与Column/Row容器的alignItems()方法不同,为ItemAlign,可选的枚举值有

名称

描述

效果(以direction=Row为例)

Start

启始端对齐

Center

居中对齐

End

结束端对齐

Stretch

拉伸到容器尺寸

BaseLine

沿文本基线对齐(限于Text文本组件)基线是西文书法或印刷学中的一个概念,它指的是多数字母底部的那条线,如下图所示

2.4. 布局换行(列)(wrap)

默认情况下,Flex容器的子组件,都排在一条线(主轴)上。当子组件在主轴方向的尺寸之和大于Flex容器时,为适应容器尺寸,所有子组件的尺寸都会自动收缩。如果需要保持子组件的尺寸不收缩,也可选择令子组件**换行(列)**显示。

wrap属性的作用就是控制如何换行,该属性的类型FlexWrap为枚举类型,可选的枚举值如下

名称

描述

效果(以direction=Row为例)

NoWrap

不换行

Wrap

换行,每一行子组件按照主轴方向排列

WrapReverse

换行,每一行子元素按照主轴反方向排列

2.5. 交叉轴多行排列方式(alignContent)

Flex容器中包含多行(列)时,可使用alignContent设置多行在交叉轴的排列方式,该属性的类型为FlexAlign,可选的枚举值如下

名称

Start

Center

End

SpaceBetween

SpaceAround

SpaceEvenly

描述

分布在起始端

居中

分布在终点端

均匀分布,首尾两项两端对齐,中间元素等间距分布

均匀分布,所有子元素两侧都留有相同的空间

均匀分布,所有子元素之间以及首尾两元素到两端的距离都相等

效果(以direction=Row为例)

3. 子组件常用属性

3.1. 交叉轴对齐(alignSelf)

Flex容器的子组件可以使用alignSelf()方法单独设置自己的交叉轴对齐方式,并且其优先级高于Flex容器alignItems。具体效果如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { // 容器组件设置子元素居中
  Text('alignSelf Start').width('25%').height(80)
    .alignSelf(ItemAlign.Start)
    .backgroundColor(0xF5DEB3)
  Text('alignSelf Baseline')
    .alignSelf(ItemAlign.Baseline)
    .width('25%')
    .height(80)
    .backgroundColor(0xD2B48C)
  Text('alignSelf Baseline').width('25%').height(100)
    .backgroundColor(0xF5DEB3)
    .alignSelf(ItemAlign.Baseline)
  Text('no alignSelf').width('25%').height(100)
    .backgroundColor(0xD2B48C)
  Text('no alignSelf').width('25%').height(100)
    .backgroundColor(0xF5DEB3)

}.width('90%').height(220).backgroundColor(0xAFEEEE)

说明:

alignSelf()的参数类型和alignItems()相同,均为ItemAlign枚举类型,且各枚举值的含义也完全相同。

3.2. 自适应伸缩

弹性布局的显著特点之一是子组件沿主轴方向的尺寸具有弹性,即子组件的大小能够随着Flex容器尺寸的变化而自动伸缩。这种弹性特性使得Flex布局能够使子组件更灵活地适应不同的屏幕尺寸和设备。和自适应伸缩的相关的属性有flexShrinkflexGrowflexBasis,下面逐一介绍

  • flexShrink

flexShrink用于设置父容器空间不足时,子组件的压缩比例,尺寸的具体计算逻辑如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Flex({ direction: FlexDirection.Row }) {
  Text('flexShrink(3)')
    .flexShrink(3)
    .width(200)
    .height(100)
    .backgroundColor(0xF5DEB3)

  Text('no flexShrink')
    .width(200)
    .height(100)
    .backgroundColor(0xD2B48C)

  Text('flexShrink(2)')
    .flexShrink(2)
    .width(200)
    .height(100)
    .backgroundColor(0xF5DEB3)  
}.width(400).height(120).padding(10).backgroundColor(0xAFEEEE) 
  • flexGrow

flexGrow用于设置父容器空间充足时,组件瓜分剩余空间的比例,尺寸的具体计算逻辑如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Flex() {
  Text('flexGrow(2)')
    .flexGrow(2)
    .width(100)
    .height(100)
    .backgroundColor(0xF5DEB3)
  Text('flexGrow(3)')
    .flexGrow(3)
    .width(100)
    .height(100)
    .backgroundColor(0xD2B48C)

  Text('no flexGrow')
    .width(100)
    .height(100)
    .backgroundColor(0xF5DEB3)
}.width(420).height(120).padding(10).backgroundColor(0xAFEEEE)

父容器宽度420vp,三个子元素原始宽度为100vp,左右padding为20vp,总和320vp,剩余空间100vp根据flexGrow值的占比分配给子元素,未设置flexGrow的子元素不参与“瓜分”。

第一个元素以及第二个元素以2:3分配剩下的100vp。第一个元素为100vp+100vp * 2/5=140vp,第二个元素为100vp+100vp * 3/5=160vp。

  • flexBasis

flexBasis用于设置子组件沿主轴方向的尺寸,相当于width或者height的作用。若设置了flexBasis,则以flexBasis为准,否则以widht或者height为准。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Flex() {
  Text('flexBasis("auto")')
    .flexBasis('auto') // 未设置width以及flexBasis值为auto,内容自身宽度
    .height(100)
    .backgroundColor(0xF5DEB3)
  Text('flexBasis("auto")'+' width("40%")')
    .width('40%')
    .flexBasis('auto') //设置width以及flexBasis值auto,使用width的值
    .height(100)
    .backgroundColor(0xD2B48C)

  Text('flexBasis(100)')  // 未设置width以及flexBasis值为100,宽度为100vp
    .flexBasis(100)  
    .height(100)
    .backgroundColor(0xF5DEB3)

  Text('flexBasis(100)')
    .flexBasis(100)
    .width(200) // flexBasis值为100,覆盖width的设置值,宽度为100vp
    .height(100)
    .backgroundColor(0xD2B48C)
}.width('90%').height(120).padding(10).backgroundColor(0xAFEEEE)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Harry技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
3分钟精通flex布局 - flex布局可视化学习工具
现在大前端中被使用最多的布局方式非flex莫属,像h5、pc、小程序、rn、甚至native都在使用flex布局,可见掌握好flex布局是多的重要。
zz_jesse
2021/02/22
9170
3分钟精通flex布局 - flex布局可视化学习工具
【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发之常见布局
线性布局(LinearLayout)是开发中最常用的布局。线性布局的子组件在线性方向上(水平方向和垂直方向)依次排列。
枫叶丹
2025/01/20
4480
【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发之常见布局
【愚公系列】2023年12月 HarmonyOS教学课程 007-ArkUI组件(Flex)
Flex布局它可以让容器中的子元素具有弹性伸缩性。Flex布局是一种二维布局模型,它可以在任意方向上对元素进行排列,并且可以动态地调整元素的大小和位置,以适应不同的屏幕尺寸和设备。通过使用Flex布局,我们可以实现响应式布局效果,以适应不同的屏幕尺寸和设备。Flex布局主要由容器和项目两个部分组成,容器是需要进行布局的元素,项目是容器中的每个子元素。
愚公搬代码
2025/06/02
560
【愚公系列】2023年12月 HarmonyOS教学课程 007-ArkUI组件(Flex)
React Native flexBox布局(一)
    布局想必大家都知道,在iOS 中我们使用代码计算屏幕宽高布局,使用Autoresizing和AutoLayout进行布局。在web中的布局一般都是依靠CSS的盒子模型,09年W3C提出了一种新的布局方案,Flex布局。ReactNative就是选用了这种布局方式。下面我们来看下FlexBox布局吧。
星宇大前端
2019/01/15
1.1K0
前端必学必会:Flex Box布局语法-属性学习攻略
Flex Box(Flexible Box),即 “弹性布局”,是目前前端开发最常用的布局方案。本文主要提供一份Flex Box布局语法-属性大全:
Carson.Ho
2021/12/06
4780
前端必学必会:Flex Box布局语法-属性学习攻略
鸿蒙Next 线性布局 (Row/Column)
Column 子元素按直方向排列 Row 子元素按水平方向排列 基本概念 主轴:Row容器主轴为水平方向,Column容器主轴为垂直方向。 交叉轴:垂直于主轴方向的轴线。Row容器交叉轴为垂直方向,Column容器交叉轴为水平方向。 当不指定宽高时,自身默认宽高由子组件决定,这时设置排列方向是看不到效果的。
用户4773577
2025/06/27
1200
5分钟吃透React Native Flexbox
今天我们来聊聊Flexbox,它是前端的一个布局方式。在React Native中是主流布局方式。如果你刚刚入门React Native,或者没有多少前端的技术经验,亦或者对其半知半解,那么这篇文章将很好的帮助你参透Flexbox的整个全貌。
Rouse
2019/07/16
1.4K0
5分钟吃透React Native Flexbox
鸿蒙 Flex 容器组件全解析:响应式布局与多端适配权威指南
在鸿蒙全场景应用开发中,Flex 容器组件作为构建响应式界面的核心引擎,通过弹性布局算法实现子组件的智能排列与空间分配。它能够根据不同设备的屏幕尺寸、分辨率和方向自动调整布局结构,完美适配手机、平板、智慧屏、车机等多端设备。本文将从基础原理到工程实践,系统解析 Flex 布局的核心属性与多端适配技巧,帮助开发者掌握跨设备界面开发的关键技术。
谢道韫
2025/06/19
1380
鸿蒙next版开发:ArkTS组件通用属性(Flex布局)
在HarmonyOS next中,ArkTS的Flex布局是一种强大且灵活的布局方式,它允许开发者在任意方向上对元素进行排列,并且可以动态地调整元素的大小和位置,以适应不同的屏幕尺寸和设备。Flex布局是响应式设计的关键工具,它提供了一系列的属性来控制子组件的排列和对齐方式。
淼学派对
2024/11/12
4570
七、ArkTS 声明式UI-常用布局-相对布局 (RelativeContainer)
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-layout-development-relative-layout-V5
Harry技术
2025/01/13
2000
七、ArkTS 声明式UI-常用布局-相对布局 (RelativeContainer)
HarmonyOS Next快速入门:线性布局(Row和Column)
##HarmonyOS Next快速入门##HarmonyOS应用开发##教育##
中雨
2025/06/24
610
鸿蒙开发:弹性布局Flex
正在开发一个搜索组件,其中一个功能是针对历史搜索的内容进行展示,由于搜索的内容长度不一,需要进行流式布局展示,效果如下:
程序员一鸣
2025/03/12
2080
鸿蒙开发:弹性布局Flex
ArkUI容器类组件-弹性布局容器(Flex)
ArkUI 开发框架为了方便开发者实现灵活的页面布局方式,提供了弹性布局 Flex ,它用来为盒装模型提供最大的灵活性。 Flex 和 Row 、 Column 组件一样,也有主轴和纵轴之分。
小帅聊鸿蒙
2024/09/27
4000
ArkUI容器类组件-弹性布局容器(Flex)
七、ArkTS 声明式UI-常用布局-线性布局(Column/Row)
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-layout-development-linear-V5
Harry技术
2025/01/13
3110
七、ArkTS 声明式UI-常用布局-线性布局(Column/Row)
10. 快速上手!HarmonyOS4.0 Flex 容器组件详解
全栈若城
2024/05/26
4070
10. 快速上手!HarmonyOS4.0 Flex 容器组件详解
07.精通HarmonyOS NEXT Flex对齐:从基础到高级布局技巧
在HarmonyOS Next的ArkUI框架中,Flex容器提供了强大而灵活的对齐系统,使开发者能够精确控制子元素在容器中的排列方式。掌握这些对齐技术,是构建专业级用户界面的关键。
全栈若城
2025/05/30
1250
07.精通HarmonyOS NEXT Flex对齐:从基础到高级布局技巧
鸿蒙容器组件 Row 全解析:水平布局技术与多端适配指南
在鸿蒙全场景应用开发中,Row 容器组件作为水平布局的标准载体,通过声明式语法实现子组件的有序水平排列。作为线性布局体系的重要组成部分,其简洁的属性体系与强大的适配能力,完美覆盖导航菜单、按钮组、图文混排等高频水平布局场景。本文将从基础原理到工程实践,系统解析 Row 组件的核心能力与实战技巧,帮助开发者构建高效、灵活的水平界面体系。
谢道韫
2025/06/23
620
React Native基础&入门教程:初步使用Flexbox布局
在上篇中,笔者分享了部分安装并调试React Native应用过程里的一点经验,如果还没有看过的同学请点击《React Native基础&入门教程:调试React Native应用的一小步》。 在本篇里,让我们一起来了解一下,什么是Flexbox布局,以及如何使用。 一、长度的单位 在开始任何布局之前,让我们来首先需要知道,在写React Native组件样式时,长度的不带单位的,它表示“与设备像素密度无关的逻辑像素点”。 这个怎么理解呢? 我们知道,屏幕上一个发光的最小点,对应着一个pixel(像素)点。
葡萄城控件
2018/07/03
2.2K0
35.[HarmonyOS NEXT Row案例三] 打造高效表单输入框:标签与输入框的弹性空间分配技巧
在应用开发中,表单是用户输入信息的重要界面元素。一个设计良好的表单不仅能提高用户体验,还能使界面更加美观整洁。本教程将详细讲解如何使用HarmonyOS NEXT的Row组件创建一个表单输入框,重点介绍标签与输入框之间的弹性空间分配技术,帮助开发者构建出专业、美观的表单界面。
全栈若城
2025/06/02
930
35.[HarmonyOS NEXT Row案例三] 打造高效表单输入框:标签与输入框的弹性空间分配技巧
五、HarmonyOS Next开发宝典:掌握Flex布局的艺术
Flex布局(弹性布局)是HarmonyOS Next中最强大的布局方式之一,它提供了一种更加高效、灵活的方式来对容器中的子元素进行排列、对齐和分配空间。无论是简单的居中显示,还是复杂的自适应界面,Flex布局都能轻松应对。
全栈若城
2025/05/30
1150
五、HarmonyOS Next开发宝典:掌握Flex布局的艺术
推荐阅读
相关推荐
3分钟精通flex布局 - flex布局可视化学习工具
更多 >
交个朋友
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档