HarmonyOS应用开发学习笔记 ArkTS 布局概述

一、布局概述

布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。在实际的开发过程中,需要遵守以下流程保证整体的布局效果

  • 确定页面的布局结构。
  • 分析页面中的元素构成。
  • 选用适合的布局容器组件或属性控制页面中各个元素的位置和大小约束。

二、布局结构

在这里插入图片描述
布局元素的组成

在这里插入图片描述

  • 组件区域(蓝区方块):组件区域表明组件的大小,width、height属性设置该区域的大小。
  • 组件内容区(黄色方块):组件区域大小减去组件的padding值,组件内容区大小会作为组件内容(或者子组件)进行大小测算时的布局测算限制。
  • 组件内容(绿色方块):组件内容本身占用的大小,比如文本内容占用的大小。组件内容和组件内容区不一定匹配,比如设置了固定的width和height,此时组件内容区大小就是设置的width和height减去padding值,但文本内容则是通过文本布局引擎测算后得到的大小,可能出现文本真实大小小于设置的组件内容区大小。当组件内容和组件内容区大小不一致时,align属性生效,定义组件内容在组件内容区的对齐方式,如居中对齐。
  • 组件布局边界(虚线部分):组件通过margin属性设置外边距时,组件布局边界就是组件区域加上margin的大小。

三、声明式UI提供了以下8种常见布局

关键字描述
Row、Column线性布局
Stack层叠布局
Flex弹性布局
RelativeContainer相对布局
GridRow、GridCol栅格布局
List列表
Grid网格
Swiper轮播
布局应用场景
线性布局(Row、Column)如果布局内子元素超过1个,且能够以某种方式线性排列时优先考虑此布局。
层叠布局(Stack)组件需要有堆叠效果时优先考虑此布局,层叠布局的堆叠效果不会占用或影响其他同容器内子组件的布局空间。例如Panel作为子组件弹出时将其他组件覆盖更为合理,则优先考虑在外层使用堆叠布局。
弹性布局(Flex)弹性布局是与线性布局类似的布局方式。区别在于弹性布局默认能够使子组件压缩或拉伸。在子组件需要计算拉伸或压缩比例时优先使用此布局,可使得多个容器内子组件能有更好的视觉上的填充容器效果。
相对布局(RelativeContainer)相对布局是在二维空间中的布局方式,不需要遵循线性布局的规则,布局方式更为自由。通过在子组件上设置锚点规则(AlignRules)使子组件能够将自己在横轴、纵轴中的位置与容器或容器内其他子组件的位置对齐。设置的锚点规则可以天然支持子元素压缩、拉伸,堆叠或形成多行效果。在页面元素分布复杂或通过线性布局会使容器嵌套层数过深时推荐使用。
栅格布局(GridRow、GridCol)栅格是多设备场景下通用的辅助定位工具,通过将空间分割为有规律的栅格。栅格不同于网格布局固定的空间划分,它可以实现不同设备下不同的布局,空间划分更随心所欲,从而显著降低适配不同屏幕尺寸的设计及开发成本,使得整体设计和开发流程更有秩序和节奏感,同时也保证多设备上应用显示的协调性和一致性,提升用户体验。推荐手机、大屏、平板等不同设备,内容相同但布局不同时使用。
媒体查询(@ohos.mediaquery)媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。例如根据设备和应用的不同属性信息设计不同的布局,以及屏幕发生动态改变时更新应用的页面布局。
列表(List)使用列表可以轻松高效地显示结构化、可滚动的信息。在ArkUI中,列表具有垂直和水平布局能力和自适应交叉轴方向上排列个数的布局能力,超出屏幕时可以滚动。列表适合用于呈现同类数据类型或数据类型集,例如图片和文本。
网格(Grid)网格布局具有较强的页面均分能力,子组件占比控制能力,是一种重要自适应布局。网格布局可以控制元素所占的网格数量、设置子组件横跨几行或者几列,当网格容器尺寸发生变化时,所有子组件以及间距等比例调整。推荐在需要按照固定比例或者均匀分配空间的布局场景下使用,例如计算器、相册、日历等。
轮播(Swiper)轮播组件通常用于实现广告轮播、图片预览、可滚动应用等。

1、布局位置

方式关键代码描述
绝对定位position使用position实现绝对定位,设置元素左上角相对于父容器左上角偏移位置。在布局容器中,设置该属性不影响父容器布局,仅在绘制时进行位置调整。
相对定位offset使用offset可以实现相对定位,设置元素相对于自身的偏移量。设置该属性,不影响父容器布局,仅在绘制时进行位置调整。

2、对子元素的约束

方式关键代码描述
拉伸flexGrow和flexShrink属性1、flexGrow基于父容器的剩余空间分配来控制组件拉伸。2、flexShrink设置父容器的压缩尺寸来控制组件拉伸。
缩放aspectRatioaspectRatio属性指定当前组件的宽高比来控制缩放,公式为:aspectRatio=width/height。
占比layoutWeight1. 将子组件的宽高设置为父组件宽高的百分比。2. layoutWeight属性,使得子元素自适应占满剩余空间。
隐藏displayPriority通过displayPriority属性来控制页面的显示和隐藏。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS应用开发学习笔记 UIAbility组件间交互 UIAbility启动,页面跳转结果回调

1、 HarmoryOS Ability页面的生命周期 2、 Component自定义组件 3、HarmonyOS 应用开发学习笔记 ets组件生命周期 4、HarmonyOS 应用开发学习笔记 ets组件样式定义 Styles装饰器:定义组件重用样式 Extend装饰器:定义扩展组件样式 5、HarmonyOS 应用开发…

(生物信息学)R语言绘图初-中-高级——3-10分文章必备——饼图(初级)

生物信息学文章的发表要求除了思路和热点以外,图片绘制是否精美也是十分重要的,本专栏为(生物信息学)R语言绘图初-中-高级——3-10分文章必备,主要通过大量文献,总结3-10分文章中高频出现的各种图片,并给大家提供图片复现的R语言代码,及图片识读。 本专栏将向大家介绍…

你好,2024!再见,2023!

大家好,我是南城余! 今天是2023年最后一天,看到各位大佬都在分享今年的总结,我也来做个年度总结,是第一次做年度总结,希望以后可以每年都做一个好好的回顾。 说来可笑,标题,2023怎么…

Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性

Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性 将skip属性注释掉或者改为false 如果为true,则工程找不到主启动类

Pytest插件pytest-cov:优雅管理测试覆盖率

在软件开发中,测试覆盖率是评估测试质量的关键指标之一。为了更方便地统计和管理测试覆盖率,Pytest插件"pytest-cov"应运而生。本文将介绍"pytest-cov"的基本用法和优雅管理测试覆盖率的方法。 什么是pytest-cov? pytest-cov 是Pyt…

zabbix-proxy代理安装及其他监控方式

zabbix-proxy代理安装及其他监控方式 安装zabbix-proxyserver端配置zabbix-proxy配置被监控的agent安装中问题解决监控网络设备JMX和IPMI监控方式 zabbix-proxy的安装,至少需要准备三台机器,一台安装服务端,一台安装agent端,这里就…

65寸OLED透明拼接屏,从这4个方面解读,让您秒懂

随着显示技术的不断进步,OLED透明拼接屏作为新一代的大屏显示解决方案,正逐渐受到市场的青睐。作为尼伽技术总监,我深知其对于高端显示市场的价值。下面,我将从技术的角度深入剖析这一产品。 一、规格与种类 65寸OLED透明拼接屏有…

Java学习笔记-day03-类名.this:内部类引用外部类实例

类名.this是啥意思? 今天在看尚硅谷的课程时里面讲了这么一句话: 集合在遍历时需要先创建一个容器,存放集合的数据,这样做浪费内存 想去验证下,就翻了翻ArrayList的迭代过程源码 在ArrayList的迭代器类Itr(…

在 PyCharm 中使用 Copilot

GitHub Copilot 由 OpenAI Codex 提供支持,可帮助用户在编辑器中实时工作。 它使用强大的 GPT-3 模型版本,该模型在大量开源代码上进行训练。 此外,GitHub Copilot 可在不同的 IDE(集成开发环境)上使用,包…

局域网IP地址冲突、环路的罪魁祸首是什么?

中午好,我的网工朋友。 这个时代,网络已经贯穿了人们的生活,对企业而言,办公信息化更是离不开网络支持。 为了提高安全管理和信息化水平,很多企业都建立了完善的办公信息系统,但一些企业在网络建设方面还…

【嵌入式】git工具基础命令学习笔记 | 嵌入式Linux

文章目录 前言一、git基础指令二、git分支管理2.1、一些基础命令2.2、时间回溯2.3、新建分支,删除分支,重命名分支 前言 参考:飞凌嵌入式ElfBoard ELF-1 软件学习手册 chatGPT 一、git基础指令 首先我们新建一个名叫git的文件夹&#xff0…

GreatSQL喊你来考证啦~

GreatSQL社区全网开放且全免费的GCA和GCP双等级考核认证,赶快来参与吧~ 认证课程介绍 GreatSQL社区开放GCA与GCP双等级认证课程,课程全面覆盖GreatSQL的安装、使用、优化、安全高可用等方面,包含构建主从和MGR架构,优化提升性能…

【动态代理详解】

文章目录 1. 关于代理1.1 代理的概述1.1.1 什么是动态代理1.1.2 动态代理能做什么 1.2 什么是代理1.2.1 生活中的代理1.2.2 为什么要找中介? 1.3 开发中的代理模式(代理)1.3.1 使用代理模式的作用 1.4 实现代理的方式 2. 静态代理2.1 什么是静…

百川智能发布角色大模型 ,零代码复刻角色轻松满足游戏领域定制需求

2024年1月9日,百川智能发布角色大模型Baichuan-NPC,深度优化了“角色知识”和“对话能力”,使模型能够更好的理解上下文对话语义,更加符合人物性格地进行对话和行动,让角色栩栩如生。此外,对于游戏领域AI角…

各版本 操作系统 对 .NET Framework 与 .NET Core 支持

有两种类型的受支持版本:长期支持 (LTS) 版本和标准期限支持 (STS) 版本。 所有版本的质量都是一样的。 唯一的区别是支持的时间长短。 LTS 版本可获得为期三年的免费支持和补丁。 STS 版本可获得 18 个月的免费支持和修补程序。 有关详细信息,请参阅 .N…

找不到文件Computer Management.lnk怎么办

win10系统右键“此电脑”,在右键菜单选择“管理”弹出错误提示: windows找不到文件Computer Management.lnk 打开电脑C盘路径C:\Windows\System32,找到compmgmt.msc文件 给compmgmt.msc文件创建一个快捷键选择文件compmgmt.msc,右…

联盛德-安全物联网芯片w800

联盛德-安全物联网芯片w800 前言一、w800简介?芯片外观 总结 前言 本文介绍w800的基本信息,详细规格,后续有时间会介绍如何适配openharmony的过程。 一、w800简介? W800 芯片是一款安全 IoT Wi-Fi/蓝牙 双模 SoC 芯片。支持 2.…

软件测试|Linux三剑客之sed命令详解

简介 sed(Stream Editor)是一款流式文本编辑器,在 Linux 和类 Unix 系统中广泛使用。它的设计目的是用于对文本进行处理和转换,可以用于替换、删除、插入、打印等操作。sed 命令通过逐行处理文本,允许您使用简单的命令…

物联网协议Coap中Californium CoapClient解析

目录 前言 一、CoapClient对象 1、类定义 2、Client方法调用 二、发送请求 1、构建请求 2、发起请求 3、接收响应 总结 前言 在之前的博客中物联网协议Coap之Californium CoapServer解析,文中简单介绍了CoapServer的实现。在物联网开发环境中,除了…

git安装教程 Windows 附安装包链接

Git是一款分布式源代码管理工具(版本控制工具) 。 git的作用 当你需要做一个大工程的时候,文件的管理无疑是非常庞大的工作,因为你需要不断的修改更新文件内容,同时可能还要保留旧版本保证可以复原,这样就需要备份多个版本的文件…