首页 > 其他分享 >【鸿蒙 HarmonyOS NEXT】相对布局:RelativeContainer

【鸿蒙 HarmonyOS NEXT】相对布局:RelativeContainer

时间:2024-09-05 21:49:40浏览次数:15  
标签:RelativeContainer align NEXT HarmonyOS 锚点 组件 VerticalAlign 100 anchor

一、概述

在应用的开发过程中,经常需要设计复杂界面,此时涉及到多个相同或不同组件之间的嵌套。如果布局组件嵌套深度过深,或者嵌套组件数过多,会带来额外的开销。如果在布局的方式上进行优化,就可以有效的提升性能,减少时间开销。

二、示例介绍

2.1、示例代码

@Entry
@Component
struct RelativeContainerPage {
  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.navImg'))
        }
        .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 })
  }
}

2.2、示例效果

三、对齐说明

3.1、设置水平方向对齐

水平方向为left, middle, right,对应容器的HorizontalAlign.Start, HorizontalAlign.Center, HorizontalAlign.End。

3.2、设置垂直方向对齐

垂直方向为top, center, bottom,对应容器的VerticalAlign.Top, VerticalAlign.Center, VerticalAlign.Bottom。

 

四、备注说明

  • 子组件可以将容器或者其他子组件设为锚点:
    • 参与相对布局的容器内组件必须设置id,不设置id的组件不显示,容器id固定为 __container__
    • 此子组件某一方向上的三个位置可以将容器或其他子组件的同方向三个位置为锚点,同方向上两个以上位置设置锚点以后会跳过第三个。
    • 前端页面设置的子组件尺寸大小不会受到相对布局规则的影响。子组件某个方向上设置两个或以上alignRules时不建议设置此方向尺寸大小。
    • 对齐后需要额外偏移可设置offset。
  • 特殊情况
    • 根据约束条件和子组件本身的size属性无法确定子组件大小,则子组件不绘制。
    • 互相依赖,环形依赖时容器内子组件全部不绘制。
    • 同方向上两个以上位置设置锚点但锚点位置逆序时此子组件大小为0,即不绘制。

标签:RelativeContainer,align,NEXT,HarmonyOS,锚点,组件,VerticalAlign,100,anchor
From: https://blog.csdn.net/weixin_71403100/article/details/141940538

相关文章

  • petite-vue 组件的 mounted 回调发生在 nextTick() 任务之后
    在使用petite-vue开发项目时,有一个列表视图,每个列表项是一个自定义组件。在向列表视图的数组数据添加数据后,希望通过EventBus触发一个事件,让新的列表项组件mounted回调可以响应这个事件。当使用PetiteVue.nextTick()传入回调函数来触发事件时,发现新的组件并没有响应该事......
  • 鸿蒙(HarmonyOS)北向开发知识点记录~
    北向开发的目标是为鸿蒙生态系统构建丰富多样的应用程序,满足用户在不同场景下的需求。通过北向开发,开发者可以充分利用鸿蒙操作系统的独特优势和强大功能,为用户带来全新的体验,同时也为自身创造更多的商业机会和价值。开发技术与特点1.分布式技术:鸿蒙操作系统的一大特色是......
  • 基于HarmonyOS的面试宝典app的设计与实现(毕业论文)
    目录摘要11引言12研究现状12.1鸿蒙技术的发展12.2鸿蒙技术的应用领域23开发工具及技术介绍23.1ArkTs编程语言23.2DevEcoStudio开发工具24系统分析34.1可行性分析34.1.1技术可行性34.1.2经济可行性34.1.3社会可行性34.2需求分析3......
  • Transfusion: Predict the Next Token and Diffuse Images with One Multi-Modal Mode
    Transfusion:PredicttheNextTokenandDiffuseImageswithOneMulti-ModalModel(2024,8)PaperTODO:目前没有开源代码,实时关注一下officialcode,Meta的工作基本开源的.本文给出了一种新的T2I的方法.lucidrains的代码本质是将LLM的transformer和图像中的diffusion结......
  • HarmonyOS NEXT开发:ArkUI组件动画-打造组件定制化动效
    组件动画ArkUI为组件提供了通用的属性动画和转场动画能力的同时,还为一些组件提供了默认的动画效果。例如,List的滑动动效,Button的点击动效,是组件自带的默认动画效果。在组件默认动画效果的基础上,开发者还可以通过属性动画和转场动画对容器组件内的子组件动效进行定制。使用组......
  • Nextjs项目中轻松添加深色和浅色主题支持
    在React或Next.js项目中实现深色和浅色主题的切换功能其实并不复杂。通过一些简单的步骤,就可以让用户在浏览网页时自由选择他们喜欢的显示模式,无论是经典的浅色主题还是更护眼的深色主题。下面我将介绍如何轻松添加这一功能。确保你已经在项目中使用了React或Next.js。如果你是初......
  • HarmonyOS Node-API支持的数据类型
    一、Node-API的数据类型 1、napi_status        是一个枚举数据类型,表示Node-API接口返回的状态信息。每当调用一个Node-API函数,都会返回该值,表示操作成功与否的相关信息。typedefenum{napi_ok,napi_invalid_arg,napi_object_expected,napi_......
  • HarmonyOS沉浸式模式FullScreen
    import{window}from'@kit.ArkUI'classFullScreen{//开启全屏asyncenable(){constctx=AppStorage.get<Context>('context')!constwin=awaitwindow.getLastWindow(ctx)win.setWindowLayoutFullScreen(true)//顶部安全区......
  • HarmonyOS实现登录
    首先,封装一个auth工具,提供初始化持久化用户信息方法,首页初始化用户,登录后存储用户,使用导出的key。1.封装auth工具exportinterfaceUser{token:stringnickname:stringavatar:stringaccount:string}classAuth{KEY:string='user'//在入口页......
  • 从0开始的HarmonyOS NEXT —— 认识基础架构到hello world页面添加(第一章)
    ⭐前言大家好,我是yma16,本文分享从0开始的HarmonyOSNEXT——认识基础架构到helloworld页面添加(第一章)。HarmonyOSSDK以Kit维度提供丰富、完备的开放能力,涵盖应用框架、系统、媒体、图形、应用服务、AI六大领域。应用框架相关Kit开放能力:AbilityKit(程序框架服务)、ArkUI(方舟UI......