鸿蒙-ArkUI 常用布局容器对齐方式

概念

主轴:在布局容器中,默认存在两根轴,分别是主轴和交叉轴,不同的容器中主轴的方向不一样的。

  • 在Column容器中主轴的方向是垂直方向。
  • 在Row容器中主轴的方向是水平方向。
  • 在Flex容器中可以通过direction参数设置主轴的方向,设置为Column时,主轴的方向是垂直方向。设置为Row时,主轴的方向是水平方向。
  • 在Stack容器中没有明确主轴与交叉轴,通过设置alignContent参数来改变容器内组件的对齐方式。

交叉轴:与主轴垂直相交的轴线,如果主轴是垂直方向,则交叉轴就是水平方向;如果主轴是水平方向,则交叉轴是垂直方向。

构建主界面

image.png

在ets目录下,新建几个子目录,点击鼠标右键 >New>Directory,新建名为view的自定义子组件目录、common公共目录和viewmodel数据目录。

在LayoutAlignIndex.ets主界面中包含显示四种容器对齐方式的入口。

// LayoutAlignIndex.ets
@Entry
@Component
struct LayoutAlignIndex {private indexList: IndexListItem[] = getIndexList();build() {Column() {// 标题Text($r('app.string.index_title'))...List() {ForEach(this.indexList, (item: IndexListItem) => {ListItem() {ListItemComp({ item: item }).margin({ top: MARGIN_FONT_SIZE_SPACE.SECOND_MARGIN })}}, (item: IndexListItem) => JSON.stringify(item))}....listDirection(Axis.Vertical).margin({ top: MARGIN_FONT_SIZE_SPACE.EIGHTH_MARGIN })}...}
}@Component
struct ListItemComp {...
}

构建容器对齐方式

在pages目录下,点击鼠标右键 >New>Page,新建Second.ets页面。在view目录下,点击鼠标右键 >New>ArkTS File,新建五个ArkTS文件,分别为ColumnShowList.ets、FlexShowList.ets、RowShowList.ets、StackComponent.ets和CommonComponent.ets。

image.png

在ColumnShowList.ets中,自定义组件ColumnShowList主要效果是在Column布局容器中,设置不同的主轴与交叉轴的对齐方式属性时,显示容器内元素的对齐方式,以及主轴对其方式和交叉轴对其方式属性设置模块。

// ColumnShowList.ets
@Component
export struct ColumnShowList {@Consume currentColumnJustifyContent: FlexAlign;@Consume currentColumnAlignItems: HorizontalAlign;build() {Column() {// Column中元素对齐方式布局Column() {ForEach(LIST, (item: number) => {CommonItem({ item: item })}, (item: number) => JSON.stringify(item))}...// 设置主轴对齐方式ColumnMainAlignRadioList().margin({ top: MARGIN_FONT_SIZE_SPACE.EIGHTH_MARGIN })// 设置交叉轴对齐方式ColumnAxisAlignRadioList().margin({ top: MARGIN_FONT_SIZE_SPACE.EIGHTH_MARGIN })}.layoutWeight(1).height(ALL_PERCENT).width(ALL_PERCENT)}
}

image.png

其中ColumnMainAlignRadioList子组件和ColumnAxisAlignRadioList子组件分别是设置主轴对齐方式单选框列表和设置交叉轴对齐方式单选框列表,并且在FlexShowList,RowShowList和StackComponent中都存在代码结构类似的子组件,只是设置的属性和参数单选框列表不同,后面不在重复其详细代码,这里选择其中一个单选框列表子组件来显示。

// ColumnMainAlignRadioList.ets
@Component
export struct ColumnMainAlignRadioList {...build() {Column({ space: MARGIN_FONT_SIZE_SPACE.FIRST_MARGIN }) {// 单选框列表模块名称Row() {Text(this.moduleName).fontSize(MARGIN_FONT_SIZE_SPACE.FOURTH_MARGIN)}.margin({ left: MARGIN_FONT_SIZE_SPACE.SECOND_MARGIN })Flex({direction: FlexDirection.Row,justifyContent: FlexAlign.SpaceBetween,wrap: FlexWrap.NoWrap}) {ForEach(this.radioList, (item: string, index: number | undefined) => {MainAlignRadioItem({ textName: item, groupName: this.groupName, isChecked: index === 0 ? true : false }).margin({ right: MARGIN_FONT_SIZE_SPACE.COMMON_MARGIN })}, (item: string) => JSON.stringify(item))}...}...}
}@Component
struct MainAlignRadioItem {...build() {Row() {Radio({ value: this.textName, group: this.groupName })....onClick(() => {switch (this.textName) {case ATTRIBUTE.START:this.currentColumnJustifyContent = FlexAlign.Start;break;case ATTRIBUTE.CENTER:this.currentColumnJustifyContent = FlexAlign.Center;break;default:this.currentColumnJustifyContent = FlexAlign.End;break;}})Text(this.textName).fontSize(MARGIN_FONT_SIZE_SPACE.THIRD_MARGIN).opacity(ATTRIBUTE_OPACITY)}}
}

image.png

在FlexShowList.ets中,自定义组件FlexShowList主要效果是在Flex布局容器中,设置不同的参数时,显示容器内元素对齐方式。

// FlexShowList.ets
@Component
export struct FlexShowList {@Consume list: number[];@Consume currentFlexDirection: FlexDirection;@Consume currentFlexJustifyContent: FlexAlign;@Consume currentFlexAlignItems: ItemAlign;@Consume currentFlexWrap: FlexWrap;@Consume currentFlexAlignContent: FlexAlign;build() {Column() {// Flex中元素对齐方式布局Flex({...}) {ForEach(this.list, (item: number) => {CommonItem({ item: item })}, (item: number) => JSON.stringify(item))}...// 设置主轴方向FlexMainDirectionRadioList().margin({ top: MARGIN_FONT_SIZE_SPACE.EIGHTH_MARGIN })// 设置主轴对齐方式FlexMainAlignRadioList().margin({ top: MARGIN_FONT_SIZE_SPACE.EIGHTH_MARGIN })// 设置交叉轴对齐方式FlexAxisAlignRadioList().margin({ top: MARGIN_FONT_SIZE_SPACE.EIGHTH_MARGIN })}.layoutWeight(1).height(ALL_PERCENT).width(ALL_PERCENT)}
}

image.png

在RowShowList.ets中,自定义组件RowShowList主要效果是在Row布局容器中,当设置不同的主轴与交叉轴的对齐方式属性时,显示容器内元素的对齐方式。

// RowShowList.ets
@Component
export struct RowShowList {@Consume currentRowJustifyContent: FlexAlign;@Consume currentRowAlignItems: VerticalAlign;build() {Column() {// Row中元素对齐方式布局Row() {ForEach(LIST, (item: number) => {CommonItem({ item: item })}, (item: number) => JSON.stringify(item))}...// 设置主轴对齐方式RowMainAlignRadioList().margin({ top: MARGIN_FONT_SIZE_SPACE.EIGHTH_MARGIN })// 设置交叉轴对齐方式RowAxisAlignRadioList().margin({ top: MARGIN_FONT_SIZE_SPACE.EIGHTH_MARGIN })}.layoutWeight(1).height(ALL_PERCENT).width(ALL_PERCENT)}
}

image.png
在StackComponent.ets中,自定义组件StackComponent主要效果是在Stack布局容器中,设置不同对齐方式属性时,容器内堆叠元素的对齐方式。

// StackComponent.ets
@Component
export struct StackComponent {@Consume currentStackAlignContent: Alignment;@Consume message: string;@State textAl: TextAlign = TextAlign.Center;build() {Column() {// Stack中元素对齐方式布局Stack({ alignContent: this.currentStackAlignContent }) {Text('').width(ALL_PERCENT).height(ALL_PERCENT).fontSize(MARGIN_FONT_SIZE_SPACE.FOURTH_MARGIN).backgroundColor($r('app.color.show_list_backgroundColor'))Text(this.message)...}.margin({ top: MARGIN_FONT_SIZE_SPACE.FIRST_MARGIN }).width(ALL_PERCENT).height(SHOW_LIST_HEIGHT_PERCENT.STACK_SHOW_LIST_HEIGHT)// 设置对齐方式StackAlignRadioList().margin({ top: MARGIN_FONT_SIZE_SPACE.EIGHTH_MARGIN })}.layoutWeight(1).height(ALL_PERCENT).width(ALL_PERCENT)}
}

image.png

在CommonComponent.ets中,自定义组件CommonItem。

// CommonComponent.ets
@Component
export struct CommonItem {private item: number = 0;build() {Text(this.item.toString()).fontSize(MARGIN_FONT_SIZE_SPACE.FIFTH_MARGIN).width(MARGIN_FONT_SIZE_SPACE.NINTH_MARGIN).height(MARGIN_FONT_SIZE_SPACE.NINTH_MARGIN).fontColor($r("app.color.show_list_fontColor")).textAlign(TextAlign.Center).align(Alignment.Center).backgroundColor($r("app.color.white")).borderRadius(MARGIN_FONT_SIZE_SPACE.COMMON_PADDING).margin(MARGIN_FONT_SIZE_SPACE.COMMON_PADDING)}
}

在Second.ets页面,根据首页跳转时的参数,渲染顶部不同的容器名称和条件渲染不同的子组件。

// Second.ets
@Entry
@Component
struct Second {private moduleList: ContainerModuleItem[] = [];private componentName: string = '';@Provide containerType: number = 0;...;aboutToAppear() {let params = router.getParams() as Record<string, Object>;this.moduleList = params.moduleList as ContainerModuleItem[];this.componentName = params.componentName as string;this.containerType = params.containerType as number;}build() {Row() {Column({ space: MARGIN_FONT_SIZE_SPACE.SIXTH_MARGIN }) {Column() {BackComp({ componentName: this.componentName })if (this.containerType === CONTAINER_TYPE.FLEX) {FlexShowList()} else if (this.containerType === CONTAINER_TYPE.COLUMN) {ColumnShowList()} else if (this.containerType === CONTAINER_TYPE.ROW) {RowShowList()} else {StackComponent()}}.width(ALL_PERCENT).height(ALL_PERCENT)}.width(ALL_PERCENT)}.height(ALL_PERCENT)}
}// 顶部子组件
@Component
struct BackComp {...
}

更多的鸿蒙学习文档或者鸿蒙的学习路线,可以前往《鸿蒙开发4.0基础-高阶文档》下面是鸿蒙学习路线略缩图:高清完整版在_保存。

最后

本篇主要介绍Flex、Column、Row和Stack这四种布局容器内子组件对齐方式的设置方法。如何灵活的使用alignItems、justifyContent、alignContent、alignSelf和align这5种设置对齐方式。

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

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

相关文章

MySQL数据库 触发器

目录 触发器概述 语法 案例 触发器概述 触发器是与表有关的数据库对象&#xff0c;指在insert/update/delete之前(BEFORE)或之后(AFTER)&#xff0c;触发并执行触发器中定义的soL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性&#xff0c;日志记录&am…

分布式搜索elasticsearch概念

什么是elasticsearch&#xff1f; elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 目录 elasticsearch的场景 elasticsearch的发展 Lucene篇 Elasticsearch篇 elasticsearch的安装 elasticsearch的场景 elasticsear…

【SpringMVC】REST(Representation State Transfer)ful开发

REST全称Representation State Transfer&#xff0c;表现形式状态转换 文章目录 1. 为什么提出了REST&#xff1f;2. RESTful入门案例案例代码修改请求方式修改成RESTful风格&#xff0c;并以POST方式提交 RESTful格式下传参RESTful入门案例总结RequestBody&#xff0c;Reques…

Linux下编写zlg7290驱动(3)-键盘驱动编写

2.3. 数据处理实现 执行上述代码后系统中就注册了我们的input设备&#xff0c;接下来我们要做的是活得键盘的键值&#xff0c;zlg7290多可以支持64个按键&#xff0c;每个按键按下后都会产生一个中断&#xff0c;我们写驱动是可以使用轮询不断检测是否有按键也可以触发中断来判…

云原生之深入解析基于FunctionGraph在Serverless领域的FinOps的探索和实践

一、背景 Serverless 精确到毫秒级的按用付费模式使得用户不再需要为资源的空闲时间付费。然而&#xff0c;对于给定的某个应用函数&#xff0c;由于影响其计费成本的因素并不唯一&#xff0c;使得用户对函数运行期间的总计费进行精确的事先估计变成了一项困难的工作。以传统云…

git分支解析

1、概述和优点 在版本控制过程中&#xff0c;同时会推进多个任务&#xff0c;为此&#xff0c;就可以为每个任务创建单独的分支。开发人员可以把自己的任务和主线任务分离开来&#xff0c;在开发自己的分支的时候不会影响主分支。 分支的好处&#xff1a; 同时推进多个功能开发…

CSS自适应分辨率 amfe-flexible 和 postcss-pxtorem:Webpack5 升级后相关插件和配置更新说明

前言 项目对应的 webpack5 版本如下&#xff1a; npm i webpack5.89.0 -D npm i webpack-cli5.1.4 -D升级插件 说明一下&#xff0c;我更喜欢固定版本号&#xff0c;这样随机bug会少很多&#xff0c;更可控~ npm i postcss-loader6.1.1 -D npm i postcss-pxtorem6.0.0 -D配…

Postman创建及删除workspace工作空间

文章目录 一、Postman创建workspace工作空间二、Postman删除workspace工作空间 一、Postman创建workspace工作空间 打开Postman 点击 Workspaces → Create Workspaces 如图所示操作 工作空间创建完成 二、Postman删除workspace工作空间 点击 Workspaces → 选择要删除…

Milvus数据一致性介绍及选择方法

1、Milvus 时钟机制 Milvus 通过时间戳水印来保障读链路的一致性&#xff0c;如下图所示&#xff0c;在往消息队列插入数据时&#xff0c; Milvus 不光会为这些插入记录打上时间戳&#xff0c;还会不间断地插入同步时间戳&#xff0c;以图中同步时间戳 syncTs1 为例&#xff0…

uniapp使用colorUI

colorUI 微动画 | ColorUI 使用文档 1&#xff1a;把colorui里三个文件复制到自己项目中去 App.vue </script> <style> import url(colorui/icon.css); import url(colorui/main.css); import url("colorui/animation.css");-webkit-keyframes show {…

Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)复现

漏洞简介 Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java Servlet API&#xff0c;鼓励开发者采用MVC架构。Struts2以WebWork优秀的设计思想为核心&#xff0c;吸收了Struts框架的部分优点&#xff0c;提供了一个更加整洁的MV…

心有暖阳,笃定前行,2024考研加油

2024考研学子&#xff0c;所有的付出终有收获&#xff0c;阳光终将穿透阴霾&#xff0c;终将上岸。 当曙光破晓的时候&#xff0c;你可曾记得那些星月为伴&#xff0c;孤独为友&#xff0c;理想为灯来指引前行之路的日子&#xff0c;那些默默扎根的日子终将化作星星在未来闪闪发…

Java项目-瑞吉外卖项目优化Day3

前后端分离开发 Yapi 是一个接口结合了接口测试、接口管理的管理平台&#xff0c;需要配置比较麻烦。看弹幕说用apifox更好用。可以将接口文档导出导入。 Swagger 注意下面的地址前面要有/。 效果&#xff1a; 可以在这里实现接口的测试&#xff0c;也可以导出文档等等。一般…

python+django教学质量评价系统o8x1z

本基于web的在线教学质量评价系统的设计与实现有管理员&#xff0c;教师&#xff0c;督导&#xff0c;学生一共四个角色。管理员功能有个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;督导管理&#xff0c;学生评价管理&#xff0c;课程信息管理&#xff0c;学生…

生产者和消费者模式

在一个系统中&#xff0c;存在生产者和消费者两种角色&#xff0c;他们通过内存缓冲区进行通信&#xff0c;生产者生产消费者需要的资料&#xff0c;消费者把资料做成产品。 最关键就是内存缓冲区为空的时候消费者必须等待&#xff0c;而内存缓冲区满的时候&#xff0c;生产者…

编译原理----算符优先级的分析(自底向上)

自底向上分析的分类如下所示&#xff1a; 算符优先分析 算符优先分析只规定算符之间的优先关系&#xff0c;也就是只考虑终结符之间的优先关系。 &#xff08;一&#xff09;若有文法G&#xff0c;如果G没有形如A->..BC..的产生式&#xff0c;其中B和C为非终结符&#xff…

springMVC-与spring整合

一、基本介绍 在项目开发中&#xff0c;spring管理的 Service和 Respository&#xff0c;SrpingMVC管理 Controller和ControllerAdvice,分工明确 当我们同时配置application.xml, springDispatcherServlet-servlet.xml , 那么注解的对象会被创建两次&#xff0c; 故…

freeswitch on debian docker

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 因为centos系统期限的原因&#xff0c;尝试在debian的docker上使用fs。 环境 docker engine&#xff1a;Version 24.0.6 debian docker&#xff1a;bullseye 11.8 freeswitch&#xff1a;v1.10.7 Debian准备 目前…

Pycharm报的一些Python语法错误

Pycharm报的一些Python语法错误 1、PEP8:Expected 2 blank less:found 1 意思是&#xff1a;类和上面的行要间隔两行&#xff0c;现在只有一行 解决办法&#xff1a; 间隔2行 2、Remove redundant parentheses 意思是&#xff1a;删除多余的括号 解决&#xff1a;删掉外面括…

LSTM和GRU vs 普通的循环神经网络RNN

1、考虑下列三种情况下&#xff0c;对比一下普通RNN的表现和LSTM和GRU表现&#xff1a; &#xff08;1&#xff09;早期观测值对预测未来观测者具有非常重要的意义。 考虑一个极端情况&#xff0c;其中第一个观测值包含一个校验和&#xff0c; 目标是在序列的末尾辨别校验和是…