HarmonyOS鸿蒙学习笔记(25)相对布局 RelativeContainer详细说明

news2024/11/18 12:07:03

RelativeContainer 简介

  • 前言
  • 核心概念
  • 官方实例
  • 官方实例改造
  • 蓝色方块改造
  • center 属性说明
  • 参考资料

前言

RelativeContainer是鸿蒙的相对布局组件,它的布局很灵活,可以很方便的控制各个子UI 组件的相对位置,其布局理念有点类似于android的约束布局ConstraintLayout,如果你熟练使用过android的约束布局,那么鸿蒙的相对布局组件理解起来也很快。

核心概念

相对布局分为水平和竖直两个方向,其中水平方向为左、中、右,对应left, middle, right,对应容器的HorizontalAlign.Start, HorizontalAlign.Center, HorizontalAlign.End。其中middle对应的是子布局水平方向的中心线。
在这里插入图片描述

垂直方向上、中、下,对应top, center, bottom,对应容器的VerticalAlign.Top, VerticalAlign.Center, VerticalAlign.Bottom。其中
center对应的是子布局竖直方向的中心线:
在这里插入图片描述
关于center的示例,见文章底部最后一个章节。

官方实例

如下图,几个颜色方块分别位于父布局的如下位置。其中父布局是一个带有边框的300*300RelativeContainer。其默认id是__container__。五个方块的id分别是颜色所代表的英文。
在这里插入图片描述

完整带有详细注释的代码如下:



struct Index {
  build() {
    Row(){
      RelativeContainer() {
        //红色方块,位于左上角
        Row().width(100).height(100)
          .backgroundColor(Color.Red)
          .alignRules({
            //上边与父布局顶部对齐
            top: {anchor: "__container__", align: VerticalAlign.Top},
            //左边与父布局的左边对齐
            left: {anchor: "__container__", align: HorizontalAlign.Start}
          })
          .id("red")

        //黄色方块,位于右上角
        Row().width(100).height(100)
          .backgroundColor(Color.Yellow)
          .alignRules({
            //上边与父布局顶部对齐
            top: {anchor: "__container__", align: VerticalAlign.Top},
            //右边与父布局右边对齐
            right: {anchor: "__container__", align: HorizontalAlign.End}
          })
          .id("yellow")

        //蓝色方块,位于中心
        Row()
          .height(100)//
          .backgroundColor(Color.Blue)
          .alignRules({
            //顶部于红色方块底部对齐
            top: {anchor: "red", align: VerticalAlign.Bottom},
            //左边与红色方块的右边对齐
            left: {anchor: "red", align: HorizontalAlign.End},
            //右边与黄色方块的左边对齐
            right: {anchor: "yellow", align: HorizontalAlign.Start}
          })
          .id("blue")

        //粉色方块:位于分布局左下角
        Row()
          .backgroundColor(Color.Pink)
          .alignRules({
            //顶部与蓝色方块的下边对齐
            top: {anchor: "blue", align: VerticalAlign.Bottom},
            //底部与父布局底部对齐
            bottom: {anchor: "__container__", align: VerticalAlign.Bottom},
            //左边与父布局左边对齐
            left: {anchor: "__container__", align: HorizontalAlign.Start},
            //右边与红色方块的右边对齐
            right: {anchor: "red", align: HorizontalAlign.End}
          })
          .id("pink")

        //绿色方块:位于父布局右下角
        Row()
          .backgroundColor(Color.Green)
          .alignRules({
            //顶部与蓝色方块底部对齐
            top: {anchor: "blue", align: VerticalAlign.Bottom},
            //底部与父布局底部对齐
            bottom: {anchor: "__container__", align: VerticalAlign.Bottom},
            //左边与黄色方块左边对齐
            left: {anchor: "yellow", align: HorizontalAlign.Start},
            //右边与父布局右边对齐
            right: {anchor: "__container__", align: HorizontalAlign.End}
          })
          .id("green")
      }
      .width(300).height(300)
      .alignSelf(ItemAlign.Center)
      .border({width:2, color: "#6699FF"})
    }.height('100%').margin({ left: 30,top:100 })
  }
}

官方实例改造

注意上面代码,下面两个方块并没有设置宽高属性,只不过根据他们的位置约束而自动计算出来的大小。所以上面的代码我们也可以改成如下方式,来体会下相对布局的灵活性。我们为下面两个方块手动设置宽高。



struct Index {
  build() {
    Row(){
      RelativeContainer() {
        //省略了红 黄 蓝三个布局的代码,因为没有改动
        
        //粉色方块:位于分布局左下角
          Row().width(100).height(100)
          .backgroundColor(Color.Pink)
          .alignRules({
            //底部与父布局底部对齐
            bottom: {anchor: "__container__", align: VerticalAlign.Bottom},
            //左边与父布局左边对齐
            left: {anchor: "__container__", align: HorizontalAlign.Start},
          })
          .id("pink")

        //绿色方块:位于父布局右下角
        Row().width(100).height(100)
          .backgroundColor(Color.Green)
          .alignRules({
            //底部与父布局底部对齐
            bottom: {anchor: "__container__", align: VerticalAlign.Bottom},
            //右边与父布局右边对齐
            right: {anchor: "__container__", align: HorizontalAlign.End}
          })
          .id("green")
      }
      .width(300).height(300)
      .alignSelf(ItemAlign.Center)
      .border({width:2, color: "#6699FF"})
    }.height('100%').margin({ left: 30,top:100 })
  }
}

蓝色方块改造

蓝色方块居中的代码读上去有一丢丢困难,所以可以在设置宽高之后,使用center和middle组件让其居中

   //蓝色方块,位于中心
    Row()
       .height(100).width(100)//设置宽和高
       .backgroundColor(Color.Blue)
       .alignRules({
         center: { anchor: "__container__", align: VerticalAlign.Center },
         middle: { anchor: "__container__", align: HorizontalAlign.Center }
       })
       .id("blue")

center 属性说明

center属性是垂直方向居中的属性,他的align也有 Top、Center、Bottom属性,我们将上面代码的Center,改成如下所示:

  Row()
  .height(100).width(100)
   .backgroundColor(Color.Blue)
   .alignRules({
     center: { anchor: "__container__", align: VerticalAlign.Top },
     middle: { anchor: "__container__", align: HorizontalAlign.Center }
   })
   .id("blue")

蓝色方块就位于父布局上边界的中心,也就是父布局上边界将蓝色方块一份为二:
在这里插入图片描述
也就是说对于center属性来说,这个center指的是子布局的竖直方向的中心线
1、 VerticalAlign.Top:子布局的中心位置与父布局上边界对齐
2、 VerticalAlign.Center:子布局的竖直方向的中心线与父布局的中心线对齐
3、 VerticalAlign.Bottom:子布局的竖直方向的中心线与父布局的下边界对齐。

同理可以理解水平方向的middle属性。在此不再赘述。

参考资料

1、HarmonyOS官方文档1
2、相对布局(RelativeContainer)官方文档2
3、RelativeContainer 官方文档3

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

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

相关文章

摄影后期照片编辑工具:LrC2024 for Mac/win 中文激活版

LrC2024(Lightroom Classic 2024)是 Adobe 公司推出的一款专业级别的照片编辑和管理软件。它是 Lightroom Classic CC 的升级版,具有更多的功能和改进。 这款软件主要用于数字摄影师和摄影爱好者处理、编辑和管理他们的照片。它提供了一套强大…

【WEEK14】 【DAY4】Swagger第二部分【中文版】

2024.5.30 Thursday 接上文【WEEK14】 【DAY3】Swagger第一部分【中文版】 目录 16.4.配置扫描接口16.4.1.修改SwaggerConfig.java16.4.1.1.使用.basePackage()方法指定扫描的包路径16.4.1.2.其他扫描方式均可在RequestHandlerSelectors.class中查看源码 16.4.2.仍然是修改Swag…

java读取文件内容(正则表达式匹配)

已知文件score.txt内容如下: 语文85分,数学89分,英语75分,马列95分。 要求解析出其中的成绩数据,并计算总成绩 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import jav…

vector的功能讲解与底层实现

本文主要介绍vector的内容以及使用和模拟实现。 vector在英文翻译中是矢量的意思,但在c中他的本质是一个顺序表(容器),是一个类模板,(用模板创建变量就要参考我们之前的实例化内容了)用可以改变…

云硬盘的基准性能测试场景

参考来源: 深入浅出云计算-05 | 云硬盘:云上IO到底给不给力 云硬盘的性能等级 当下的云硬盘经过了多次的软硬件迭代,尤其是SSD的迅速发展,吞吐量和随机读写能力等各项性能指标都已经不再是问题了。在现代云计算中,已…

解析前端开发中同源策略与配置代理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 在前端开发中,跨域请求是一个常见的问题。同源策略限制了浏览器中一个页面…

2.1Docker安装MySQL8.0

2.1 Docker安装MySQL8.0 1.拉取MySQL docker pull mysql:latest如:拉取MySQL8.0.33版本 docker pull mysql:8.0.332. 启动镜像 docker run -p 3307:3306 --name mysql8 -e MYSQL_ROOT_PASSWORDHgh75667% -d mysql:8.0.33-p 3307:3306 把mysql默认的3306端口映射…

字符串-至多包含K种字符的子串中最长子串(mid)

一、题目描述 二、解题思路 借鉴以下题目思想,使用双指针,外层循环右侧指针移动,内存循环左侧指针移动 字符串-最长不含重复字符的子字符串(mid)-CSDN博客文章浏览阅读622次,点赞17次,收藏4次。java刷题:…

芯盾时代API安全监测平台

面对难搞的API安全,芯盾时代作为领先的零信任业务安全产品方案提供商,给出了自己的答案——以AI技术赋能API安全,打造API安全监测平台,帮助企业建立资产摸得清、漏洞看得透、攻击测得出、数据拦得住的API风险监测体系,…

通过LabVIEW提升生产设备自动化水平

现代制造业对生产设备的自动化水平提出了越来越高的要求。使用LabVIEW这一强大的图形化编程环境,可以显著提升生产设备的自动化程度,改善生产效率和产品质量。本文将详细分析如何通过LabVIEW改善生产设备的自动化水平,并提供具体的实施策略与…

c++函数基础总结

在给出的代码片段中,我们看到两部分内容:一个类定义和一个全局函数声明。让我们逐一分析它们: 类定义: cpp复制代码 class { public: void a(); }; 这个类定义是不完整的,因为它没有类名。但为了说明,我…

【SQL学习进阶】从入门到高级应用【三范式】

文章目录 什么是数据库设计三范式三范式一对多怎么设计多对多怎么设计一对一怎么设计最终的设计 🌈你好呀!我是 山顶风景独好 💕欢迎来到我的博客,很高兴能够在这里和您见面! 💕希望您在这里可以感受到一份…

【SpringBoot】SpringBoot整合JWT

目录 先说token单点登录(SSO)简介原理单点登录的优势单点登录流程分布式单点登录方式方式一:session广播机制实现方式二:使用cookieredis实现。方式三:token认证 JWT数字签名JWT的作用JWT和传统Session1、无状态&#…

精雕细琢,B 端 UI 设计展典雅风范

精雕细琢,B 端 UI 设计展典雅风范

virtualbox中ubuntu22.04网络配置

第一:添加两个网卡,网卡1是NAT方式,网卡2是仅主机模式(两个顺序不能颠倒) 第二步:启动ifconfig查看网络

LabVIEW车体静强度试验台测控系统

LabVIEW车体静强度试验台测控系统 开发了一种基于LabVIEW的车体静强度试验台测控系统,通过自动化技术提高试验的精度和效率。系统采用LabVIEW软件与S7-200 SMART PLC硬件平台相结合,实现了对液压缸作用力的精确控制和试验数据的实时采集及管理。 传统的…

11.1 排序算法

目录 11.1 排序算法 11.1.1 评价维度 11.1.2 理想排序算法 11.1 排序算法 排序算法(sorting algorithm)用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用,因为有序数据通常能够被更高效地查找、分析和处理。 如图 1…

MySQL事务与MVCC

文章目录 事务和事务的隔离级别1.为什么需要事务2.事务特性1_原子性(atomicity)2_一致性(consistency)3_持久性(durability)4_隔离性(isolation) 3.事务并发引发的问题1_脏读2_不可重…

香橙派 AI pro:AI 加速初体验

香橙派 AI pro:AI 加速初体验 在AI领域,不断涌现的硬件产品为开发者提供了前所未有的便利和可能性。今天,我要介绍的这款产品——香橙派 AIpro,就是其中的佼佼者。在昇腾 AI 芯片的加持下,这款开发板有着出色的算力。…

【WEEK14】 【DAY3】Swagger第一部分【中文版】

2024.5.29 Wednesday 目录 16.Swagger16.1.Swagger简介16.1.1.前后端分离16.1.2.前后端分离时代16.1.3.产生的问题16.1.4.解决方案16.1.5.Swagger 16.2.SpringBoot集成Swagger16.2.1.新建swagger-demo项目16.2.2.导入依赖16.2.2.1.springfox-swagger216.2.2.2.springfox-swagge…