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

news2024/12/26 10:37:51

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')  //设置锚点为row1

        Row() {
          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')  //设置锚点为row2

        Row()
          .width(100)
          .height(100)
          .backgroundColor('#FFCC00')
          .alignRules({
            top: { anchor: 'row2', align: VerticalAlign.Top }
          })
          .id('row3')  //设置锚点为row3

        Row()
          .width(100)
          .height(100)
          .backgroundColor('#FF9966')
          .alignRules({
            top: { anchor: 'row2', align: VerticalAlign.Top },
            left: { anchor: 'row2', align: HorizontalAlign.End },
          })
          .id('row4')  //设置锚点为row4

        Row()
          .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.coloradmin.cn/o/1619510.html

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

相关文章

Security初探(二)

SpringSecurity初探(一)-CSDN博客 上面介绍了用了在SpringBoot里配置UserDetailsService和PasswordEncoder两个Bean 下面介绍一种替换掉上面两个Bean的方式 看下效果实际是和创建UserDetailsService和PassswordEncoder两个Bean的效果是一样的 还有一种方式混合搭配 当然不推…

JetBrains的Python集成开发环境PyCharm 2024.1版本在Windows/Linux系统的下载与安装配置

目录 前言一、PyCharm在Windows安装二、PyCharm在Linux安装三、Windows下使用配置四、Linux下使用配置总结 前言 “ PyCharm是一款专为Python语言开发人员设计的集成开发环境(IDE)。它提供了丰富的功能和工具,可以帮助开发人员更高效地编写、…

国内版sora火爆市场!灰豚AI数字人上线超高清“文生视频“产品震撼上市

美国人工智能研究公司OpenAI发布的人工智能文生视频sora产品还不到两月,近日国内著名数字人头部公司灰豚AI数字人上线超高清“文生视频”产品,成为数字人行业首个发布文生视频的平台。 值得注意的是,灰豚AI数字人上线的超高清文生视频产品功能…

GAN Inversion: A Survey笔记

文章目录 论文介绍问题描述 交待准备工作GAN模型数据集评价指标PhotorealismFaithfulnessEditability 论文方法隐空间介绍Z空间W和W空间S空间P空间 三种方法1 基于学习的GAN Inversion2 基于优化的GAN inversion3 混合GAN inversion GAN inversion方法的特性所支持的分辨率 论文…

无人机干扰技术及干扰设备突破性发展

无人机干扰技术主要指的是通过各种手段干扰无人机的正常运行,从而达到使其失去控制、降低其性能或获取其信息的目的。这些干扰手段可以包括无线电干扰、GPS干扰、信号屏蔽、光学干扰等。 1.无线电干扰:由于无人机在遥控、定位、数据传输等方面都依赖于无…

齐护K210系列教程(一)_软件硬件准备

关于课程 本课程是基于齐护AIstart(K210)和scratch图形化编程的系列课程。 关于AIstart 内置[Kendryte K210]AI芯片,专为机器视觉与机器听觉多模态识别而设计,可广泛应用于智能家居/机器视觉/智能机器人/安防监控等领域。更多详细内容请点击这里。 1 硬件准备 …

UDS故障码的状态

在使用UDS19 02 服务读取故障码信息时,读取到的故障码信息占四个字节,其中 04 20就代表 P0 04 20(动力系统故障),第三个字节00就代表发生故障的原因。第四个字节就是今天我们重点强调的故障码状态。 解读故障码状态字节…

Mimics21软件学习总结

一. Mimics21软件安装过程 ① 解压下载好的Mimics软件包; ② 双击“MIS_Medical_21.0.exe”打开等待安装程序初始化完成; ③ 进入安装向导点击“next”; ④ 点击选择“Iaccept the agreement”同意相关协议,随后点击“next”&…

网络编程 -- 简易TCP网络程序

一 字符串回响 1.1 核心功能 字符串回响程序类似于 echo 指令,客户端向服务器发送消息,服务器在收到消息后会将消息发送给客户端,该程序实现起来比较简单,同时能很好的体现 socket 套接字编程的流程。 1.2 程序结构 这个程序我们…

LangSmith帮助测试大模型系统

LangSmith是评估大模型能力好坏的评估工具,能够量化评估基于大模型的系统的效果。LangSmith通过记录langchain构建的大模型应用的中间过程,从而能够更好的调整提示词等中间过程做优化。想要使用LangSmith首先进入他的设置页面,https://smith.langchain.com/settings注册一个…

DaVinci Fusion Studio 19 for Mac/win:影视后期特效合成的巅峰之作

在影视后期制作的广袤天地里,一款强大的特效合成软件如同一位技艺高超的魔法师,能够化腐朽为神奇,将普通的影像素材转变为震撼人心的视觉盛宴。而DaVinci Fusion Studio 19,正是这样一款备受影视从业者推崇的巅峰之作。 无论是Ma…

python简易小时钟

import time import turtledef getTime():tt time.localtime() # 结构化的时间ss time.strftime(%Y年%m月%d日 %H:%M:%S, tt)return sspen turtle.Turtle()pen.backward(100) pen.speed(0)while True:time.sleep(1)times getTime()pen.clear()pen.write(times, font("…

恒峰智慧科技—森林消防泵:既可灭除火灾,又可清理水患

在广袤的森林中,火灾与水患如同潜伏的猛兽,时刻威胁着生态的安全。然而,随着科技的进步,我们有了更强大的武器来对抗这些威胁——森林消防泵。这款神奇的设备不仅能迅速扑灭火灾,还能在雨季到来时清理水患,…

基于Springboot的幼儿园管理系统

基于SpringbootVue的幼儿园管理系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 用户管理 教师管理 幼儿园信息管理 班级信息管理 工作日志管理 会议记录管理…

【用户投稿】Apache SeaTunnel 2.3.3+Web 1.0.0版本安装部署

项目概要 Apache SeaTunnel 是一个分布式、高性能、易扩展的数据集成平台,用于实时和离线数据处理,支持多种数据源之间的数据迁移和转换。 其中,Apache-seatunnel-web-1.0.0-bin.tar.gz和apache-seatunnel-2.3.3-bin.tar.gz代表了 Apache SeaTunnel Web…

FIR补偿滤波器——matlab的FDA实现

输入采样频率:192KHz 抽取倍数:2 通带截至频率:20KHz 通带衰减:0.1dB 阻带衰减:120dB 在更多选项那里,设置c为0.5,代表抽取倍数为1/c,p设置为4,代表级联阶数。FIR补偿…

新生儿听力筛查怎么做?宝爸宝妈必看

健康讲堂 根据全国第二次残疾人抽样调查结果显示,目前我国现有听力残疾人2780万,其中17岁以下单纯听力残疾儿童22.15万。新生儿听力障碍发生率约为1~3‰,如果没有得到早期有效的治疗,势必影响其情感、智力的正常发育&a…

CCFC3007 串口中断问题和W1C记录

最近在看国芯的一个串口中断问题。 串口发送完成中断和接收中断是这样写的。 寄存器描述是这样的: 发送完成和接收完成中断,写1清除。 乍一看,上面的中断处理函数写的应该没问题,但其实这样写是有隐患的。 先来看段程序&#x…

大模型应用RAG系列(1)初识RAG

题外话 之前我们在讲大模型的应用方向和架构时,有提到RAG、Agent、Fine-Tune。在作者写大模型专题的文章时,也是边学习,边梳理,边总结。在这个过程中,大模型在各个方向都不断地快速发展,对应的paper、理论…

第55篇:创建Nios II工程之Hello_World<一>

Q:本期我们开始介绍创建Platform Designer系统,并设计基于Nios II Professor的Hello_world工程。 A:设计流程和实验原理:需要用到的IP组件有Clock Source、Nios II Professor、On-Chip Memory、JTAG UART和System ID外设。Nios I…