当前位置: 首页 > news >正文

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

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.lryc.cn/news/362420.html

相关文章:

  • 自然语言处理学习中英文翻译语料库
  • 可视化数据科学平台在信贷领域应用系列二:数据清洗
  • JS面试题:hash和history的区别
  • GEE案例——归一化差异水体指数丰水期、枯水期的水域面积和水深分析(青海湖为例)
  • 机器视觉检测--相机
  • 【人工智能】第四部分:ChatGPT的技术实现
  • 小程序配置自定义tabBar及异形tabBar配置操作
  • 解析《动物园规则怪谈》【逻辑】
  • 上传RKP 证书签名请求息上传到 Google 的后端服务器
  • Debian和ubuntu 嵌入式的系统的 区别
  • HTML旋转照片盒子
  • 【UE5 刺客信条动态地面复刻】实现无界地面01:动态生成
  • AI产品经理系列-如何使用kimi快速撰写用户故事(含提示词)
  • MySQL索引与事务
  • 『大模型笔记』从基础原理出发提升深度学习性能
  • 【二叉树】Leetcode 222. 完全二叉树的节点个数【简单】
  • golang界面设计器,全网少见
  • 如何在GlobalMapper中加载高清卫星影像?
  • 【机器学习】解锁AI密码:神经网络算法详解与前沿探索
  • Java如何实现pdf转base64以及怎么反转?
  • 动态规划5:62. 不同路径
  • Python编程学习第一篇——Python零基础快速入门(五)-列表(List)
  • c# - 运算符 << 不能应用于 long 和 long 类型的操作数
  • 问题排查|记录一次基于mymuduo库开发的服务器错误排查(回响服务器无法正常工作)
  • 中介模式实现聊天室
  • 游戏开发与游戏设计区别
  • 卡尔曼滤波算法的matlab实现
  • Unity Obi Rope失效
  • 基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
  • Gnu/Linux 系统编程 - 如何获取帮助及一个演示