Android视角看鸿蒙第十二课-鸿蒙的布局之相对布局RelativeContainer

Android视角看鸿蒙第十二课-鸿蒙的布局之相对布局RelativeContainer

导读

相对布局和线性、层叠布局一样都是类似于Android布局的,之前两篇文章已经了解线性、层叠布局的使用方法,这篇文章一起来学习下鸿蒙中的相对布局。
之前的文章中,我偶然提起过,我不太喜欢使用相对布局。
我思考了下为什么会有这种想法呢?
相对布局写起来太麻烦了
Android中虽然可以使用Xml来设置UI,然而相对linearlayout和FrameLayout,至少要多写2条依赖属性,比如是在哪个组件的右侧,在那个组件的下方,而Linear或者Frame不用
相对布局阅读成本高
linearlayout和FrameLayout在阅读代码的时候,组件的层级一目了然,相对布局则需要阅读每个组件的依赖关系
相对布局需要设置每个锚点的ID
Android中相对布局是通过ID来设置依赖关系的,有的组件本身不需要被JAVA代码调用,比如只是个分割线,但因为有组件需要依赖他,则必须设置ID。不够简洁,起ID也费脑子

个人拙见,欢迎探讨。
接下来一起看看鸿蒙中的相对布局吧。

相对布局RelativeContainer

概述

RelativeContainer为采用相对布局的容器,支持容器内部的子元素设置相对位置关系。子元素支持指定兄弟元素作为锚点,也支持指定父容器作为锚点,基于锚点做相对位置布局。下图是一个RelativeContainer的概念图,图中的虚线表示位置的依赖关系。
在这里插入图片描述

看起来和Android没什么差别,可以依赖兄弟组件,也可以依赖父布局,同样不可以依赖兄弟的儿子。哈哈

锚点设置

锚点设置是指设置子元素相对于父元素或兄弟元素的位置依赖关系。在水平方向上,可以设置left、middle、right的锚点。在竖直方向上,可以设置top、center、bottom的锚点。为了明确定义锚点,必须为RelativeContainer及其子元素设置ID,用于指定锚点信息。ID默认为“container,其余子元素的ID通过id属性设置。
未设置ID的子元素在RelativeContainer中不会显示。

这一段话中的关键点不少,
1、RelativeContainer有默认ID
2、子元素必须设置ID,不设置ID的话不显示

相对布局的代码写法

RelativeContainer父组件为锚点,__container__代表父容器的id。

RelativeContainer() {Row()// 添加其他属性.alignRules({top: { anchor: '__container__', align: VerticalAlign.Top },left: { anchor: '__container__', align: HorizontalAlign.Start }}).id("row1")Row()....alignRules({top: { anchor: '__container__', align: VerticalAlign.Top },right: { anchor: '__container__', align: HorizontalAlign.End }}).id("row2")
}
...

在这里插入图片描述

设置相对于锚点的对齐位置

设置了锚点之后,可以通过align设置相对于锚点的对齐位置。

在水平方向上,对齐位置可以设置为HorizontalAlign.Start、HorizontalAlign.Center、HorizontalAlign.End。

在这里插入图片描述
在竖直方向上,对齐位置可以设置为VerticalAlign.Top、VerticalAlign.Center、VerticalAlign.Bottom。
在这里插入图片描述

场景实例

@Entry
@Component
struct Index {build() {Row() {RelativeContainer() {Row().width(100).height(100).backgroundColor('#FF3333').alignRules({top: { anchor: '__container__', align: VerticalAlign.Top },  //以父容器为锚点,竖直方向顶头对齐middle: { anchor: '__container__', align: HorizontalAlign.Center }  //以父容器为锚点,水平方向居中对齐}).id('row1')  //设置锚点为row1Row() {Image($r('app.media.icon'))}.height(100).width(100).alignRules({top: { anchor: 'row1', align: VerticalAlign.Bottom },  //以row1组件为锚点,竖直方向底端对齐left: { anchor: 'row1', align: HorizontalAlign.Start }  //以row1组件为锚点,水平方向开头对齐}).id('row2')  //设置锚点为row2Row().width(100).height(100).backgroundColor('#FFCC00').alignRules({top: { anchor: 'row2', align: VerticalAlign.Top }}).id('row3')  //设置锚点为row3Row().width(100).height(100).backgroundColor('#FF9966').alignRules({top: { anchor: 'row2', align: VerticalAlign.Top },left: { anchor: 'row2', align: HorizontalAlign.End },}).id('row4')  //设置锚点为row4Row().width(100).height(100).backgroundColor('#FF66FF').alignRules({top: { anchor: 'row2', align: VerticalAlign.Bottom },middle: { anchor: 'row2', align: HorizontalAlign.Center }}).id('row5')  //设置锚点为row5}.width(300).height(300).border({ width: 2, color: '#6699FF' })}.height('100%').margin({ left: 30 })}
}

在这里插入图片描述

结语

和Android差不多吧,语法熟悉下就可以了。

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

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

相关文章

Ansible自动化运维工具主机清单配置

作者主页:点击! Ansible专栏:点击! 创作时间:2024年4月24日12点21分 Ansible主机清单文件用于定义要管理的主机及其相关信息。它是Ansible的核心配置文件之一,用于Ansible识别目标主机并与其建立连接。 …

【Netty框架问题总结】

文章目录 Netty初步认识Netty简单介绍为什么jdk已经实现了NIO还要用netty框架: Reactor 线程模型Reactor 单线程模型Netty线程模型 Netty 简单实现EchoClient端实现:ClientHandler实现EchoServer实现ServerHandler实现: Netty初步认识 Netty…

【电控笔记5.7】Notch-Filter滤波器

Notch-Filter滤波器 通过阻尼比,限制陡峭程度 阻尼比小,比较陡峭,对周围信号干扰比较小,衰减度小 总结 实现:转换成Z转换进行伯德图验证

「锐利」升级到13.5版本,重磅推出插拼式智能拼版等多项新功能!

包装印前软件「锐利」又升级了!13.5版本! 锐利是集印前行业三十多年的技术和经验开发的一款包装印前处理软件,提供陷印、拼大版、预览、智能标记、预飞、工具箱、导出图像、搜索器、油墨编辑、曲线调整、模拟套印不准、导入标准PDF、条形码、…

YashanDB V23.2 LTS发版 | 共享集群首个长期支持版本

4月,YashanDB正式发布长期支持版本YashanDB V23.2 LTS,标志着YashanDB单机主备、共享集群和分布式实时数仓等完整产品体系,已全面进入可规模化使用的长期支持阶段;同时配套数据迁移工具、监控运维工具和开发者工具,可以…

【C语言__指针01__复习篇11】

目录 前言 一、什么是指针 二、计算机中常见的单位 三、CPU是怎样找到一块内存空间的 四、如何得到变量的地址 五、指针变量 六、解引用指针变量的作用 七、指针变量的大小 八、指针变量类型的意义 8.1 指针的解引用 8.2 指针-整数 九、void*指针 十、const修饰变…

微博评论爬取

import requests import csv# 打开CSV文件以写入数据 f open(data.csv, modea, encodingutf-8-sig, newline) csv_writer csv.DictWriter(f, fieldnames[昵称, 性别, 归属地, 内容]) csv_writer.writeheader()# 定义一个函数用于获取评论内容 def GetContent(max_id):# 设置请…

LeetCode-2385. 感染二叉树需要的总时间【树 深度优先搜索 广度优先搜索 二叉树】

LeetCode-2385. 感染二叉树需要的总时间【树 深度优先搜索 广度优先搜索 二叉树】 题目描述:解题思路一:记录父节点 DFS解题思路二:解题思路三:深度优先搜索建图 广度优先搜索求感染时间【最容易理解】 题目描述: 给…

CMakeLists.txt中如何添加编译选项?

1. 引子 编译器有多种可供选择,如g、c、clang等,如下以c作为示例。 2. 使用CMAKE_CXX_FLAGS添加编译选项 在Makefile中可能用类似如下的指令来添加编译选项: /usr/bin/c -Wall -Wextra -Wno-sign-compare -Wno-unused-variable -Wno-unuse…

pytorch-MNIST测试实战

目录 1. 为什么test2. 如何做test3. 什么时候做test4. 完整代码 1. 为什么test 如下图:上下两幅图中蓝色分别表示train的accuracy和loss,黄色表示test的accuracy和loss,如果单纯看train的accuracy和loss曲线就会认为模型已经train的很好了&a…

【js】解决自动生成颜色时相邻颜色视觉相似问题的技术方案

解决自动生成颜色时相邻颜色视觉相似问题的技术方案 在进行大规模颜色生成时,特别是在数据可视化、用户界面设计等应用领域,一个常见的挑战是确保相邻颜色在视觉上具有足够的区分度。本文介绍的方法通过结合黄金分割比与饱和度、亮度的周期性变化&#…

YOLOv8改进项目汇总-超全改进-ultralyticsPro介绍:订阅了《芒果YOLOv8原创改进专栏》的读者免费赠送,包括很多稀有改进

🔥🔥🔥专注于YOLOv8改进,NEW - YOLOv8 🚀 in PyTorch >, Support to improve Backbone, Neck, Head, Loss, IoU, LA, NMS and other modules🚀 Makes YOLOv8 improvements easy again 芒果出品 YOLOv8…