鸿蒙开发-UI-布局

鸿蒙开发-序言

鸿蒙开发-工具

鸿蒙开发-初体验

鸿蒙开发-运行机制

鸿蒙开发-运行机制-Stage模型

鸿蒙开发-UI

鸿蒙开发-UI-组件

鸿蒙开发-UI-组件-状态管理

鸿蒙开发-UI-应用-状态管理

鸿蒙开发-UI-渲染控制

文章目录

前言

一、布局概述

1.布局结构

2.布局元素组成

3.布局分类

4.布局位置

5.布局子元素的约束

总结


前言

上文我们学习记录鸿蒙开发中的UI渲染相关的知识点,深入学习了条件渲染、循环渲染的使用方法,以及数据懒加载。本文学习鸿蒙开发UI布局相关的知识。

一、布局概述

在声明式UI中,所有的页面都是由自定义组件构成,组件按照布局的要求依次排列,最终构成UI页面。

布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。

页面布局的合理流程:

1.布局结构

布局的结构通常是分层级的,代表了用户界面中的整体架构。

一个常见的页面结构如下所示

Page表示页面的根节点,Column/Row等元素为系统组件。针对不同的页面结构,ArkUI提供了不同的布局组件来实现对应布局的效果

2.布局元素组成

布局相关的容器组件可形成对应的布局效果

布局元素组成图如下所示

组件区域(蓝区方块):组件区域表明组件的大小,width、height属性设置该区域的大小。

组件内容区(黄色方块):组件区域大小减去组件的border值,组件内容区大小会作为组件内容(或者子组件)进行大小测算时的布局测算限制。

组件内容(绿色方块):组件内容本身占用的大小,比如文本内容占用的大小。组件内容和组件内容区不一定匹配,比如设置了固定的width和height,此时组件内容的大小就是设置的width和height减去padding和border值,但文本内容则是通过文本布局引擎测算后得到的大小,可能出现文本真实大小小于设置的组件内容区大小。当组件内容和组件内容区大小不一致时,align属性生效,定义组件内容在组件内容区的对齐方式,如居中对齐。

组件布局边界(虚线部分):组件通过margin属性设置外边距时,组件布局边界就是组件区域加上margin的大小。

做过UI开发的同学应该对这几个属性margin border padding应该非常好理解,考虑到开发的通用性,以及便于技术栈转型,这里UI布局相关的属性都是CSS布局中保持一致的,对于没有前端开发经验的同学,把组件占用的区域,使用盒子模型能更好理解。

3.布局分类

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

4.布局位置

布局容器相对于自身或其他组件的位置,通过position、offset等属性控制

定位能力

使用场景

实现方式

绝对定位

对于不同尺寸的设备,使用绝对定位的适应性会比较差,在屏幕的适配上有缺陷。

使用position实现绝对定位,设置元素左上角相对于父容器左上角偏移位置。在布局容器中,设置该属性不影响父容器布局,仅在绘制时进行位置调整。

相对定位

相对定位不脱离文档流,即原位置依然保留,不影响元素本身的特性,仅相对于原位置进行偏移。

使用offset可以实现相对定位,设置元素相对于自身的偏移量。设置该属性,不影响父容器布局,仅在绘制时进行位置调整。

绝对定位案例:

注:根据组件定义的顺序,使用position定位的组件会覆盖在其前面定义的组件,但是对其后定义的组件没有影响。

相对定位案例:

5.布局子元素的约束

对子元素的约束能力

使用场景

实现方式

拉伸

容器组件尺寸发生变化时,增加或减小的空间全部分配给容器组件内指定区域。

flexGrow和flexShrink属性:

  1. flexGrow基于父容器的剩余空间分配来控制组件拉伸。
  2. flexShrink设置父容器的压缩尺寸来控制组件压缩。

缩放

子组件的宽高按照预设的比例,随容器组件发生变化,且变化过程中子组件的宽高比不变。

aspectRatio属性指定当前组件的宽高比来控制缩放,公式为:aspectRatio=width/height。

占比

占比能力是指子组件的宽高按照预设的比例,随父容器组件发生变化。

基于通用属性的两种实现方式:

1. 将子组件的宽高设置为父组件宽高的百分比。

2. layoutWeight属性,使得子元素自适应占满剩余空间。

隐藏

隐藏能力是指容器组件内的子组件,按照其预设的显示优先级,随容器组件尺寸变化显示或隐藏,其中相同显示优先级的子组件同时显示或隐藏。

通过displayPriority属性来控制页面的显示和隐藏。


总结

本文学习了鸿蒙开发UI布局相关的知识,鸿蒙开发的UI布局技术栈基本与目前前端开发主流技术栈是一致的,这样可以易化前端开发的技术转型。本文简单了解了鸿蒙开发中使用频率最高的布局分类,后面会详细学习每种布局容器的使用。

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

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

相关文章

场效应管在电路中如何控制电流大小

场效应管的概念 场效应晶体管(FieldEffectTransistor缩写(FET))简称场效应管。主要有两种类型(juncTIonFET—JFET)和金属-氧化物半导体场效应管(metal-oxidesemiconductorFET,简称M…

操作系统详解(5)——信号(Signal)

系列文章: 操作系统详解(1)——操作系统的作用 操作系统详解(2)——异常处理(Exception) 操作系统详解(3)——进程、并发和并行 操作系统详解(4)——进程控制(fork, waitpid, sleep, execve) 文章目录 概述信号的种类Hardware EventsSoftware Events 信号的原理信号…

YOLOv8改进 | 注意力篇 | 实现级联群体注意力机制CGAttention (全网首发)

一、本文介绍 本文给大家带来的改进机制是实现级联群体注意力机制CascadedGroupAttention,其主要思想为增强输入到注意力头的特征的多样性。与以前的自注意力不同,它为每个头提供不同的输入分割,并跨头级联输出特征。这种方法不仅减少了多头注意力中的计算冗余,而且通过增…

虚幻UE 特效-Niagara特效初识

虚幻的Niagara特效系统特别的强大,可以为开发者提供丰富的视觉效果! 本篇笔记对Niagara系统进行初步的学习探索 文章目录 前言一、Niagara四大核心组件二、粒子发射器和粒子系统1、粒子发射器的创建2、粒子系统的创建3、Niagara系统的使用 总结 前言 在…

【SSM框架】初识Spring

初识Spring Spring家族 Spring发展到今天已经形成了一种开发的生态圈,Spring提供了若千个项目,每个项目用于完成特定的功能 ✅Spring Framework(底层框架)Spring Boot(提高开发速度)Spring Cloud&#xf…

C# 图解教程 第5版 —— 第24章 预处理指令

文章目录 24.1 什么是预处理指令24.2 基本规则24.3 符号指令(#define、#undef )24.4 条件编译(#if、#else、#elif、#endif)24.5 条件编译结构24.6 诊断指令(#warning、#error)24.7 行号指令(#li…

最新域名群站开源系统:打造强大网站矩阵,引领SEO优化新潮流!

搭建步骤 第一步:安装PHP和MYSQL服务器环境 对于想要深入了解网站建设的人来说,自己动手安装PHP和MYSQL服务器环境是必不可少的步骤。这将使你能够更好地理解网站的运行机制,同时为后续的网站开发和优化打下坚实基础。 第二步:…

迅腾文化用网络集成化生态系统助力品牌之路的坚实后盾

商业竞争激烈,品牌不仅是企业的标志和形象,更是其核心价值和竞争力的体现。然而,企业在品牌推广过程中面临着诸多如缺乏有效的渠道管理、品牌形象模糊以及竞争激烈的市场环境等。这些阻碍着企业的品牌发展和市场占有率的提升。本文将通过企业…

[GN] nodejs16.13.0版本完美解决node-sass和sass-loader版本冲突问题

项目场景: npm install 运行vue项目时候 问题描述 项目场景:sass-loader ,node-sass出错 ! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: smoore-mes-web1.4.0 npm ERR! Found: webpack3.12.0 npm ER…

【计算机组成原理】高速缓冲存储器 Cache 的写策略(Writing Policy)

写策略 Writing Policy 缓存的写策略指的是确定何时将数据写入缓存或主存的策略。 写命中 Write Hit 全写法 Write Through 在全写法策略中,每次发生写操作时都会将数据同时写入缓存和主存。这样可以保证数据的一致性,但会增加主存的写入操作&#xf…

ubuntu连接xshell怎么连接

在网上找了好多办法都不行 例如 太久没打开Ubuntu可能输入命令查不到IP地址,解决办法也比较简单,首先第一步 确定自己能不能进入管理员root权限(输入命令su),如果没有的话得重新配置,如下图 这是因为当前Ub…

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(1)准备工作、部门管理

一、准备工作 1.明确需求 根据产品经理绘制的页面原型,对部门和员工进行相应的增删改查操作。 2.环境搭建 将使用相同配置的不同项目作为Module放入同一Project,以提高相同配置的复用性。 准备数据库表(dept, emp) 资料中包含…

[Linux 进程(三)] 进程优先级,进程间切换,main函数参数,环境变量

文章目录 1、进程优先级1.1 Linux下查看进程优先级1.2 Linux 进程优先级的修改PRI and NItop命令配合操作更改优先级 1.3 竞争 独立 并行 并发 2、进程间切换3、Linux2.6内核进程调度队列3.1 活跃进程3.2 过期进程 4 main函数参数 — 命令行参数4.1 利用main函数的参数实现一个…

golang实现rpc方法二:使用jsonrpc库【跨平台】

首先在golang实现rpc方法一net/rpc库中实现了RPC方法,但是那个方法不是跨平台的,没法在其他语言中调用这个实现的RPC方法,接下来我们可以通过jsonroc库实现跨语言的RPC方法。俩种实现方式的代码其实也是差不多的,大差不差&#xf…

Spark---累加器

1.累加器实现原理 累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中定义的变量,在Executor 端的每个 Task 都会得到这个变量的一份新的副本,每个 task 更新这些副本的值后,传回 Driver 端进行 merge。 //建立与Spark框架…

wpf使用Popup封装数据筛选框

(关注博主后,在“粉丝专栏”,可免费阅读此文) 类似于DevExpress控件的功能 这是DevExpress的winform筛选样式,如下: 这是DevExpress的wpf筛选样式,如下: 这是Excel的筛选样式,如下: 先看效果 本案例使用wpf原生控件封装,功能基本上都满足,只是颜色样式没有写…

扫描电镜技术在材料科学中的应用及发展趋势

在材料科学领域,扫描电镜技术扮演着极为重要的角色,广泛应用于多种材料形态结构、界面状况、损伤机制和材料性能预测的研究。本文将深入探讨扫描电镜技术的结构、主要性能、工作原理、试样制备技术以及在不同领域的应用。 第一部分:扫描电镜…

【现代密码学】笔记4--消息认证码与抗碰撞哈希函数《introduction to modern cryphtography》

【现代密码学】笔记4--消息认证码与抗碰撞哈希函数《introduction to modern cryphtography》 写在最前面4 消息认证码与抗碰撞哈希函数MAC概念回顾(是的,我忘记这些缩写是什么了。。)MAC的定义适应性CMA(Chosen Message Attack&a…

Android json功能解析

1. 简介 JAVAScript Object Notation是一种轻量级的数据交换格式具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持)。  JSON采用兼容性很高的文本格式&#xf…

Python | 四、链表

为什么需要链表 在Python中,引入链表这一结构没有像C等语言那样有很多好处,因为Python里的列表和字符串结构已经十分灵活且大小可变,仍保留的好处如下: 列表、字符串等结构是连续存储的,因此如果有一块较小的内存区域…