鸿蒙ArkTS中的布局容器组件(Column、Row、Flex、 Stack、Grid)

  在鸿蒙ArkTS中,布局容器组件有很多,常见的有:
  ⑴ Column:(垂直布局容器):用于将子组件垂直排列。
  ⑵ Row:(水平布局容器):用于将子组件水平排列。
  ⑶ Flex:(弹性布局方式)它提供了更加有效的方法对容器中的子元素进行排列、对齐和分配剩余空间。
  ⑷ Stack:Stack布局是一种可以将多个组件按照一定顺序叠放的布局。
  ⑸ Grid(网格容器):用于创建二维网格布局,适合需要行列对齐的复杂布局。
  ⑹ List(列表容器):用于展示列表数据,可以设置列表项的布局和样式。
  ⑺ Tabs(页签容器):用于创建页签布局,允许用户在不同的页面或视图间切换。
  ⑻ Swiper(滑块视图容器):用于创建滑动视图,常用于图片轮播或广告等场景。
  ⑼ Scroll(可滑动的容器):允许用户滚动查看超出视图范围的内容。
  ⑽ RelativeContainer(相对布局容器):允许子元素相对于容器或指定的兄弟元素进行定位。
  上面的11中布局容器组件各有特点,共同的特性是:
  ⑴ 空间分配属性(如space):用于调整子组件之间的间距。
  ⑵ 对齐属性(如justifyContent和alignItems):用于设置子组件在主轴和交叉轴方向上的对齐方式。
  ⑶ 尺寸属性(如width和height):用于设置容器的宽度和高度。
  ⑷ 边距和填充(如padding和margin):用于设置容器的内边距和外边距。
  ⑸ 其他属性,比如背景色等。

  可以一起学习,方便对比。

  一、Column和Row

  Column和Row都是线性布局方式。

  Column组件:用于创建垂直方向的线性布局,其子组件会按照从上到下的顺序排列。
  Row组件:用于创建水平方向的线性布局,其子组件会按照从左到右的顺序排列。
  常用属性:
  ① width:设置组件的宽度。
  ② height:设置组件的高度。
  ③ alignment:设置子组件在垂直方向上的对齐方式(如顶部对齐、底部对齐、居中对齐等)。
  ④ spacing:设置子组件之间的间距。
  ⑤ backgroundColor:设置组件的背景颜色。
  ⑥ padding:设置组件的内边距。
  ⑦ Row组件的特有属性wrap:设置是否允许子组件换行(当子组件总宽度超过Row宽度时)。

  做一个2行三列的宫格布局,使用Column和Row。

// 获取随机颜色的函数
function getRandomColor() {const letters :string= '0123456789ABCDEF';let color:string = '#';for (let i = 0; i < 6; i++) {let Itemp:number=Math.floor(Math.random() * 16)color += letters.substr(Itemp,1);}return color;
}@Entry
@Component
struct Index {str:string='在鸿蒙ArkTS中,Column和Row是两种常用的布局容器组件,它们分别用于垂直和水平布局。Column(垂直布局容器)用于将子组件垂直排列,Row(水平布局容器)用于将子组件水平排列。'build() {Column() {Row(){Column(){Text(this.str).fontSize(18).fontColor(getRandomColor()).textAlign(TextAlign.Center).maxLines(4).textOverflow({overflow:TextOverflow.Ellipsis})}.layoutWeight(1).height('100%').justifyContent(FlexAlign.Center)Column(){Text(this.str).fontSize(18).fontColor(getRandomColor()).align(Alignment.Center)}.layoutWeight(1).height('100%').justifyContent(FlexAlign.Center)Column(){Text(this.str).fontSize(18).fontColor(getRandomColor())}.layoutWeight(1).height('100%').justifyContent(FlexAlign.Center)}.height('50%')Row(){Column(){Text(this.str).fontSize(18).fontColor(getRandomColor())}.justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center).layoutWeight(1).height('100%')Column(){Text(this.str).fontSize(18).fontColor(getRandomColor())}.justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center).layoutWeight(1).height('100%')Column(){Text(this.str).fontSize(18).fontColor(getRandomColor())}.justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center).layoutWeight(1).height('100%')}.height('50%')}.width('100%').height('100%')}
}

  效果图:

  代码写得有些乱,主要是公共的属性太多,可以使用@style和@Extend来优化代码,并且还可以提供变化的灵活性。

  下面的代码@Style只是展示一种写法,主要是@Extend(组件)的写法。

function getRandomColor() {const letters :string= '0123456789ABCDEF';let color:string = '#';for (let i = 0; i < 6; i++) {let Itemp:number=Math.floor(Math.random() * 16)color += letters.substr(Itemp,1);}return color;
}
@Extend(Text) function CustomText() {.fontColor(getRandomColor()).fontSize(18).textAlign(TextAlign.Center).maxLines(5).textOverflow({ overflow: TextOverflow.Ellipsis })
}
@Extend(Column) function ColumnCustomAttr(){.justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)
}@Entry
@Component
struct Index {str: string = '在鸿蒙ArkTS中,Column和Row是两种常用的布局容器组件,它们分别用于垂直和水平布局。Column(垂直布局容器)用于将子组件垂直排列,Row(水平布局容器)用于将子组件水平排列。'@StylesCommonStyle() {.layoutWeight(1).height('100%').padding({top:5,left:5,right:5,bottom:5}).margin({top:5,left:5,right:5,bottom:5}).border({width:2,color:getRandomColor()})}build() {Column() {Row() {Column() { Text(this.str).CustomText().CommonStyle() }.CommonStyle().ColumnCustomAttr()Column() { Text(this.str).CustomText() }.CommonStyle().ColumnCustomAttr()Column() { Text(this.str).CustomText() }.CommonStyle().ColumnCustomAttr()}.height('50%')Row() {Column() { Text(this.str).CustomText() }.CommonStyle().ColumnCustomAttr()Column() { Text(this.str).CustomText().CommonStyle() }.CommonStyle().ColumnCustomAttr()Column() { Text(this.str).CustomText() }.CommonStyle().ColumnCustomAttr()}.height('50%')}.width('100%').height('100%')}
}

  上面的代码就整洁了一些,而且方便修改,无论修改的是公共属性还是组件独有属性。

  实际效果图:

  二、Flex(弹性布局组件)

  Flex布局是一种二维布局模型,它可以在任意方向上对元素进行排列,并且可以动态地调整元素的大小和位置,以适应不同的屏幕尺寸和设备。通过使用Flex布局,可以实现响应式布局效果。

 

  Flex(弹性伸缩布局)组件当容器的宽或者高超出父容器时会默认进行压缩显示。Row相当于Flex中的主轴,Column相当于Flex中的交叉轴。

  Flex主要属性:

  ① direction(主轴的方向):用于指定子组件在Flex容器上排列的方向,即主轴的方向。可选值包括Row(主轴方向为水平向右)、RowReverse(主轴方向为水平向左)、Column(主轴方向为垂直向下)和ColumnReverse(主轴方向为垂直向上)

  ② justifyContent(主轴的对齐方式):用于定义所有子组件在Flex容器主轴上的对齐方式。,可选值:justifyContent:FlexAlign.Start / Center / End / SpaceBetween / SpaceAround / SpaceEvenly,共有6种方式。

  ③ alignItems(交叉轴的对弃方式):用于定义所有子组件在Flex容器交叉轴上的对齐方式。可选值:alignItems.Auto / Start / Center / End / Baseline /Stretch,共有6种方式。

  ④ wrap(布局换行):用于确定Flex容器是单行/列排列还是多行/列排列。在多行布局时,它还会通过交叉轴方向确定新行的堆叠方向。可选值:wrap:FlexWrap.NoWrap / Wrap / WrapReverse。

  演示:

function getRandomColor() {const letters :string= '0123456789ABCDEF';let color:string = '#';for (let i = 0; i < 6; i++) {let Itemp:number=Math.floor(Math.random() * 16)color += letters.substr(Itemp,1);}return color;
}
@Extend(Text) function CustomText() {.fontColor(getRandomColor()).fontSize(18).textAlign(TextAlign.Center).maxLines(5).textOverflow({ overflow: TextOverflow.Ellipsis }).margin(5).padding(5).height('50%').width('30%').border({width:2,color:getRandomColor()})
}
@Entry
@Component
struct Index {str: string = 'Flex(弹性伸缩布局)组件当容器的宽或者高超出父容器时会默认进行压缩显示。Row相当于Flex中的主轴,Column相当于Flex中的交叉轴。'build() {Flex({wrap:FlexWrap.Wrap}){Text(this.str).CustomText()Text(this.str).CustomText()Text(this.str).CustomText()Text(this.str).CustomText()Text(this.str).CustomText()Text(this.str).CustomText()}.height('100%').width('100%')}
}

  效果图:

  三、Stack(层叠布局组件)

  Stack布局是一种可以将多个组件按照一定顺序叠放的布局。在Stack布局中,后添加的组件会自动覆盖前面添加的组件,可以通过设置zIndex控制层级。

  ① 层叠效果:组件需要有堆叠效果时优先考虑此布局,层叠布局的堆叠效果不会占用或影响其他同容器内子组件的布局空间。
  ② zIndex控制:通过设置子组件的zIndex可以控制层级,zIndex越大越在上层。
  ③ 动画支持:Stack布局还支持添加动画,通过动画可以实现组件的平移、旋转等动态效果。

  Stack主要的布局属性:alignContent:Alignment.Bottom / ToStart / Top / TopEnd / Start / End / Center / BottomSatrt /Bottom / BottomEnd 共有9种样式

  测试代码:

function getRandomColor() {const letters :string= '0123456789ABCDEF';let color:string = '#';for (let i = 0; i < 6; i++) {let Itemp:number=Math.floor(Math.random() * 16)color += letters.substr(Itemp,1);}return color;
}
@Extend(Button) function CustomText(iW:number,iH:number,iZ:number) {.fontColor(Color.White).fontSize(18).margin(5).padding(5).height(iH).width(iW).backgroundColor(getRandomColor()).align(Alignment.Start).border({width:1,color:getRandomColor()}).zIndex(iZ)
}
@Entry
@Component
struct Index {@State zIndexValue:number[]=[1,2,3,4,5,6]build() {Stack({alignContent:Alignment.Bottom}){Button('1').CustomText(300,50,this.zIndexValue[0]).onClick(()=>{this.zIndexValue[0]=-this.zIndexValue[0]})Button('2').CustomText(250,100,this.zIndexValue[1]).onClick(()=>{this.zIndexValue[1]=-this.zIndexValue[1]})Button('3').CustomText(200,200,this.zIndexValue[2]).onClick(()=>{this.zIndexValue[2]=-this.zIndexValue[2]})Button('4').CustomText(150,300,this.zIndexValue[3]).onClick(()=>{this.zIndexValue[3]=-this.zIndexValue[3]})Button('5').CustomText(100,400,this.zIndexValue[4]).onClick(()=>{this.zIndexValue[4]=-this.zIndexValue[4]})Button('6').CustomText(50,500,this.zIndexValue[5]).onClick(()=>{this.zIndexValue[5]=-this.zIndexValue[5]})}.height('100%').width('100%').backgroundColor(Color.Pink)}
}

  效果图:

  点击按钮可以更改按钮的叠放次序。

  四、Grid(层叠布局组件)

  Grid组件用于控制网格的布局和样式。
  常用的属性:
  ① columnsTemplate:设置网格布局的列数及每列的宽度比例。例如,'1fr 1fr 1fr'表示将容器分为三列,每列占据相同的宽度。
  ② rowsTemplate:设置网格布局的行数及每行的高度比例。例如,'1fr 1fr'表示将容器分为两行,每行占据相同的高度。
  ③ columnsGap:设置列与列之间的间距。
  ④ rowsGap:设置行与行之间的间距。
  ⑤ width:设置Grid组件的宽度。
  ⑥ height:设置Grid组件的高度。
  ⑦ backgroundColor:设置Grid组件的背景颜色。
  ⑧ scroller:可滚动组件的控制器,用于与可滚动组件进行绑定(可选)。

  GridItem是Grid的子组件,用于在网格中定义具体的项目(即单元格的内容)。GridItem组件支持多种属性,用于控制项目的布局和样式。
  常用属性:
  ① rowStart、rowEnd:指定当前GridItem元素的起始行号和终点行号。
  ② columnStart、columnEnd:指定当前GridItem元素的起始列号和终点列号。

  测试代码:

function getRandomColor() {const letters :string= '0123456789ABCDEF';let color:string = '#';for (let i = 0; i < 6; i++) {let Itemp:number=Math.floor(Math.random() * 16)color += letters.substr(Itemp,1);}return color;
}
@Entry
@Component
struct Index {@State numbers: string[] = ['1', '2', '3', '4','5','6'];build() {Column() {Grid() {ForEach(this.numbers, (item: string, index: number) => {GridItem() {Text(item).fontSize(16).backgroundColor(getRandomColor()).width('50%').height('50%').textAlign(TextAlign.Center).padding(20).margin(20)}.backgroundColor(getRandomColor())})}.columnsTemplate('1fr 1fr').rowsTemplate('1fr 1fr 1fr')}}
}

  效果图:


  实际在使用布局组件中,常常多种容器组件结合起来使用。
 

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

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

相关文章

RPC核心实现原理

目录 一、基本原理 二、详细步骤 三、额外考虑因素 RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种计算机通信协议&#xff0c;也是一种用于实现分布式系统中不同节点之间进行通信和调用的技术。其实现原理主要可以分为以下几个步骤&…

Android Studio加载旧的安卓工程项目报错处理

文章目录 Invalid Gradle JDK configuration foundNDK not configuredCMake 3.10.2 was not found安装cmake适配cmake版本号 com.intellij.openapi.externalSystem.model.ExternalSystemExceptiongradle版本过低或下载不了下载gradle与依赖库超时替换gradle国内源替换Maven 仓库…

全星魅-物联网定位终端-北斗定位便携终端-北斗有源终端

在当今快速发展的物流运输行业中&#xff0c;精准定位与实时监控已成为确保货物安全与高效运输的关键因素。为了满足这一需求&#xff0c;QMCZ10作为一款集4G&#xff08;LTE Cat1&#xff09;通讯技术与智能定位功能于一体的终端产品&#xff0c;应运而生。它不仅具备普通定位…

银行卡二要素核验 API 对接说明

本文将介绍一种 银行卡二要素核验 API 对接说明&#xff0c;它可用于校验姓名和银行卡号的真实性和一致性。 接下来介绍下 银行卡二要素核验 API 的对接说明。 注册链接 点击链接注册&#xff0c;即可使用&#xff01; 申请流程 要使用 API&#xff0c;需要先到 银行卡二要…

关于elementui el-radio 赋值问题

今天遇到这样的问题&#xff1a; 点击的时候&#xff0c;同时选中 照抄官网&#xff01; 后来发现了问题&#xff1a; 也就是说如果你的版本太低&#xff0c;就不能用value&#xff0c;而得用label&#xff0c;于是修改 <el-radio-group v-model"searchTime"&g…

查缺补漏---子网划分方法(定长与不定长子网)

第一类题型&#xff1a; 方法&#xff1a;切蛋糕 例1&#xff1a; 现将一个 IP 网络划分成4个子网&#xff0c;若其中一个子网是 172.16.1.128/26&#xff0c;则下列网络中&#xff0c;不可能是另外三个子网之一的是&#xff08;&#xff09; A.172.16.1.0/25 B.172…

P11229 [CSP-J 2024] 小木棍

[CSP-J 2024] 小木棍 题目描述 小 S 喜欢收集小木棍。在收集了 n n n 根长度相等的小木棍之后&#xff0c;他闲来无事&#xff0c;便用它们拼起了数字。用小木棍拼每种数字的方法如下图所示。 现在小 S 希望拼出一个正整数&#xff0c;满足如下条件&#xff1a; 拼出这个数…

嵌入式开发之进程函数

1、进程创建-fork #include <unistd.h> pid_t fork(void); 创建新的进程&#xff0c;失败时返回-1成功时父进程返回子进程的进程号&#xff0c;子进程返回0通过fork的返回值区分父进程和子进程 pid_t pid; //fork子进程之后&#xff0c;子进程和父进程会同时继续往下执行…

【循环引用及格式化输出】

垃圾回收机制 当一个值在内存中直接引用跟间接引用的量为0时&#xff0c;&#xff08;即这个值没有任何入口可以找到它&#xff09;那么这个值就会被清空回收♻️&#xff0c;释放内存空间&#xff1b; 列表在内存中的存储方式 1&#xff09;引用计数的两种方式 x "ea…

从0开始学习Linux——文本编辑器

往期目录&#xff1a; 1、从0开始学习Linux——Linux简介&安装 2、从0开始学习Linux——搭建属于自己的Linux系统 我们通过前面教程的学习已经了解了什么是Linux&#xff0c;并且我们也定制安装了属于我们自己的一个Linux系统。从这个章节开始我们将开始学习如何去操作Linu…

“北斗三号”如何赋能工业物联网

北斗三号是我国独立自主研发的第三代卫星导航系统&#xff0c;是北斗卫星导航系统的重要组成部分。北斗三号系统具有全球覆盖能力&#xff0c;除了提供基本的定位、导航、授时服务外&#xff0c;还提供高精度和短报文通信服务等。针对产业物联网应用&#xff0c;北斗三号也发挥…

相关衍生 pika+mongo

衍生相关 pikamongo 很多平台不提供完整的数据展示, 翻页只能翻几页,不过提供相关推荐等方法可获取更多的数据; 使用 rabbitmq 是因为数据量可能有几十上百万, 且能持久化 mongo对于数据并不实时的更新到查询里 def main():# mongodb# client MongoClient(localhost, 27017)cl…

Odoo | 免费开源ERP:汽车及零配件行业信息化解决方案

文 / 开源智造 Odoo亚太金牌服务 概述 围绕汽车行业产业链上下游企业的整体业务主线&#xff0c;提供面向汽车主机厂整车个性化制造解决方案&#xff0c;产业链上下游一体化协同解决方案&#xff0c;数字化精益制造解决方案、全价值链质量管理解决方案&#xff0c;数字化运营解…

【Linux】【守护进程】总结整理

守护进程&#xff08;Daemon&#xff09;是运行在后台的进程&#xff0c;通常没有与之关联的控制终端。守护进程在启动后会脱离控制终端&#xff0c;并继续在后台运行&#xff0c;即使用户退出登录或者终端关闭也不会影响它们的运行。守护进程常用于提供网络服务、定期执行任务…

vue中html如何转成pdf下载,pdf转base64,忽略某个元素渲染在pdf中,方法封装

一、下载 html2Canvas jspdf npm install jspdf html2canvas二、封装转换下载方法 htmlToPdf.js import html2Canvas from html2canvas import JsPDF from jspdf/*** param {*} reportName 下载时候的标题* param {*} isDownload 是否下载默认为下载&#xff0c;传false不…

火山引擎云服务docker 安装

安装 Docker 登录云服务器。 执行以下命令&#xff0c;添加 yum 源。 yum update -y yum install epel-release -y yum clean all yum list依次执行以下命令&#xff0c;添加Docker CE镜像源。更多操作请参考Docker CE镜像。 # 安装必要的一些系统工具 sudo yum install -y yu…

CSS例子: 横向排列的格子

效果 HTML <view class"content"><view class"item" v-for"item of 5">{{item}}</view></view> CSS .content {height: 100vh;display: flex;flex-direction: row; flex-wrap: wrap;align-content: flex-start;backgro…

智能家居的未来:AI让生活更智能还是更复杂?

内容概要 智能家居的概念源于将各种家居设备连接到互联网&#xff0c;并通过智能技术进行控制和管理。随着人工智能的迅速发展&#xff0c;这一领域也迎来了前所未有的机遇。从早期简单的遥控器到如今可以通过手机应用、语音助手甚至是环境感应进行操作的设备&#xff0c;智能…

ios打包文件上传App Store windows工具

在苹果开发者中心上架IOS APP的时候&#xff0c;在苹果开发者中心不能直接上传打包文件&#xff0c;需要下载mac的xcode这些工具进行上传&#xff0c;但这些工具无法安装在windows或linux电脑上。 这里&#xff0c;我们可以不用xcode这些工具来上传&#xff0c;可以用国内的香…

ArkTS中的组件基础、状态管理、样式处理、class语法以及界面渲染

一、组件基础 1.什么是ArkTS ArkTS是HarmoyOS优选的助力应用开发的语言&#xff0c;ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步的扩展&#xff0c;继承了TS所有的特性&#xff0c;是TS的超集。 扩展的能力如下&#xff1a; 基本语法 …