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

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

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

相关文章

TRB 2024论文分享:基于生成对抗网络和Transformer模型的交通事件检测混合模型

TRB(Transportation Research Board,美国交通研究委员会,简称TRB)会议是交通研究领域知名度最高学术会议之一,近年来的参会人数已经超过了2万名,是参与人数和国家最多的学术盛会。TRB会议几乎涵盖了交通领域…

三、ngxin虚拟主机

目录 什么是nginx虚拟主机修改端口 访问页面1、配置nginx.config 文件2、 添加配置给目录中写入内容检测nginx 是否有语法错误(nginx -t)重启 nginx查看配置结果 不同主机网卡 查看到不同的页面先添加一个临时ip修改ngixn配置文件创建目录文件检测nginx …

在vue项目中使用百度地图,点击或搜索打点组件封装

一、在index.html文件中引入百度地图 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content…

React入门 - 06(TodoList 列表数据的新增和删除)

本章内容 目录 一、实践一下 React 的列表渲染二、TodoList 新增功能三、列表循环的 key四、删除 上一节内容我们完成了输入框中可以自由输入内容&#xff0c;这一节我们继续 TodoList功能的完善&#xff1a;列表数据的新增和删除。 在开始之前&#xff0c;我们先介绍一下 Re…

前端对接电子秤、扫码枪设备serialPort 串口使用教程

因为最近工作项目中用到了电子秤&#xff0c;需要对接电子秤设备。以前也没有对接过这种设备&#xff0c;当时也是一脸懵逼&#xff0c;脑袋空空。后来就去网上搜了一下前端怎么对接&#xff0c;然后就发现了SerialPort串口。 Serialport 官网地址&#xff1a;https://serialpo…

c++八股1

对多态的认识&#xff1a; 在C中&#xff0c;多态性是面向对象程序设计的一个核心特性&#xff0c;它体现了“一个接口&#xff0c;多种实现”的思想。多态有两种形式&#xff1a; 静态多态&#xff08;编译时多态&#xff09;&#xff1a;通过函数重载和运算符重载实现&#x…

Linux 内核学习 3 - 虚拟内存和物理内存

虚拟内存其实是 CPU 和操作系统使用的一个障眼法&#xff0c;联手给进程编织了一个假象&#xff0c;让进程误以为自己独占了全部的内存空间&#xff1a; 在 32 位系统中&#xff0c;进程以为自己独占了 3G 的内存空间。 在 64 位系统中&#xff0c;进程以为自己独占了 128T 的…

NodeJs 第十二章 nodemon

nodemon 是一个监视器&#xff0c;用于监控工程中的文件变化&#xff0c;如果发现文件有变化&#xff0c;可以执行一段脚本。 本章节只介绍基础用法&#xff0c;深入学习请参考 官方文档 安装 全局安装 npm install -g nodemon本地安装 npm install --save-dev nodemon用法 …

杨中科 EFCORE 第四部分 命令详解56-61

Migrations 深入研究Migrations 1、使用迁移脚本&#xff0c;可以对当前连接的数据库执行编号更高的迁移&#xff0c;这个操作叫做“向上迁移” (Up)&#xff0c;也可以执行把数据库回退到旧的迁移&#xff0c;这个操作叫“向下迁移(Down&#xff09; 2、除非有特殊需要&…

机器人行业概况(2)

上篇已经介绍过关于机器人的定义以及分类&#xff0c;下面来看看机器人产业市场规模。 二、国内机器人产业市场规模 中国机器人产业在国家智能制造相关政策的引导下蓬勃发展。在新冠肺炎疫情防控期间&#xff0c;消毒、配送、测温、巡检等各类机器人的“火线上岗”&#xff0…

javascript:javascript去除字符串空格(空白符)

使用js去除字符串内所带有空格&#xff0c;有以下三种方法&#xff1a; 1 replace正则匹配方法 去除字符串内所有的空格 str str.replace(/\s*/g,""); 去除字符串内两头的空格 str str.replace(/^\s*|\s*$/g,""); 去除字符串内左侧的空格 str st…

spring-boot2.7.8添加swagger

一、新建项目swaggerdemo 二、修改pom.xml 注意修改&#xff1a;spring-boot-starter-parent版本为&#xff1a;2.7.8 添加依赖&#xff1a; springfox-swagger2 springfox-swagger-ui springfox-boot-starter <?xml version"1.0" encoding"UTF-8"…

C++日志库——spdlog

介绍 https://github.com/gabime/spdlog.git spdlog is a header only library. Just copy the files under include to your build tree and use a C11 compiler. spdlog是一个仅有头文件的库&#xff0c;只需要拷贝include下面的文件加到本地工程目录并使用支持C11的编译器编…

【打卡】牛客网:BM86 大数加法

题目分析&#xff1a; 因为是大数&#xff0c;所以不能&#xff1a;将string转为int&#xff0c;进行相加后&#xff0c;再int转为string。 而是直接模拟加法过程。 我写的&#xff1a; 一些细节&#xff1a; 需要反转。因为字符串从左到右遍历&#xff0c;加法从右往左遍…

QT第3天

如上图界面&#xff0c;需求如下&#xff1a; 1、根据名字添加水果&#xff0c;并设置好单价 2、切换文件查看模式 3、点击任意水果可以显示单价 4、重量改变时&#xff0c;总价自动显示 //widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <Q…

RH850P1X芯片学习笔记-Flash Memory

文章目录 FeaturesClock Supply Block DiagramFlash SizeMemory ConfigurationRegistersRegister Base AddressList of RegistersRegister Reset Condition 与Flash Memory相关的操作模式Functional OverviewOption BytesOPBT0 — Option Byte 0OPBT1 — Option Byte 1OPBT2 —…

【CSS】保持元素宽高比

保持元素的宽高比&#xff0c;在视频或图片展示类页面是一个重要功能。 本文介绍其常规的实现方法。 实现效果 当浏览器视口发生变化时&#xff0c;元素的尺寸随之变化&#xff0c;且宽高比不变。 代码实现 我们用最简单的元素结构来演示&#xff0c;实现宽高比为4&#xf…

鸿蒙Harmony是如何影响Android工程师的呢?

其实鸿蒙在2019就已经出来了&#xff0c;那时候还是套壳Android的。从2023年9月的发布会上&#xff0c;华为宣布鸿蒙原生应用全面启动、HarmonyOS NEXT亮相以后&#xff0c;围绕着纯血鸿蒙展开的鸿蒙应用生态发展迅猛&#xff0c;目前已经有包括社交、金融、影音、游戏、资讯、…

【Java万花筒】时钟精灵:Java日期库全景剖析

时间漫步者&#xff1a;深入Java时间库实战 前言 在现代软件开发中&#xff0c;处理日期与时间是一个常见而又具有挑战性的任务。Java为我们提供了强大的日期与时间处理库&#xff0c;这些库不仅使日期与时间的操作更加方便&#xff0c;而且满足了各种复杂的需求。本文将深入…

docker-compose和docker compose的区别

在docker实际使用中&#xff0c;经常会搭配Compose&#xff0c;用来定义和运行多个 Docker 容器。使用时会发现&#xff0c;有时候的指令是docker-compose&#xff0c;有时候是docker compose&#xff0c;下面给出解释。 docker官方文档&#xff1a;https://docs.docker.com/c…