HarmonyOS 鸿蒙Next页面绘制完成后如何获取某个view的宽高和位置

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next页面绘制完成后如何获取某个view的宽高和位置 【关键字】

  • 页面绘制
  • view
  • 宽高
  • 位置

【问题描述】

怎么在页面绘制完成后获取某个view的宽高和位置?需要页面绘制后根据组件宽高,设置子窗口大小。

其中主要问题如下:

  • 获取绘制完成后组件最终宽高。
  • 设置子窗口时好像需要根据屏幕分辨率去计算实际大小,应该怎么计算?

【解决方案】

使用组件区域变化事件来监控组件变化时组件的位置和宽高。

参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-component-area-change-event-V5#示例

示例demo如下:

@Entry
@Component
struct a {
@State value: string = 'Text142542535354'
@State sizeValue: string = ''

build() {
  Column() {
    Text(this.value)
      .backgroundColor(Color.Green)
      .margin(30)
      .fontSize(20)
      .onClick(() => {
        this.value = this.value + 'Text'
      })
      .onAreaChange((oldValue: Area, newValue: Area) => {
        console.info(`Ace: on area change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`)
        this.sizeValue = JSON.stringify(newValue)
      })
    Text('new area is: \n' + this.sizeValue).margin({ right: 30, left: 30 })
  }
  .width('100%').height('100%').margin({ top: 30 })
}
}

说明:

  • 无法获取绘制完成后组件最终宽高,因为创建窗口后又修改大小问题导致的,可以后在回调函数中设置大小。
  • 应该是因为单位问题,onAreaChange得到的单位是vp,resize是px,这个要去换算一下。

更多关于HarmonyOS 鸿蒙Next页面绘制完成后如何获取某个view的宽高和位置的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

没找到resize这个变量来自哪里,写错了?

更多关于HarmonyOS 鸿蒙Next页面绘制完成后如何获取某个view的宽高和位置的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中,当你完成页面绘制后,要获取某个view(组件)的宽高和位置,可以通过以下几种方式实现,但不涉及Java或C语言的具体代码实现细节:

  1. 使用ComponentgetLayoutParams方法:

    • 调用目标view的getLayoutParams方法,该方法返回一个Component.LayoutParams对象,其中包含了view的宽度和高度信息(注意这些值可能是布局参数中定义的,不一定是最终绘制的大小)。
  2. 通过Componentmeasurelayout过程:

    • 在view的onLayoutFinished回调中或者确保view已经完成布局后,调用getWidth()getHeight()方法来获取最终的宽高。
    • 使用getBoundingClientRect()方法可以获取view在父组件中的边界矩形,该矩形包含了view的位置和尺寸信息。
  3. 监听布局变化:

    • 如果view的布局可能会在运行时改变,可以监听布局变化事件,在变化发生时重新获取宽高和位置。

具体实现时,你可能需要确保view已经完成了布局过程,即在页面绘制完成后的某个时机(如onLayoutFinished回调中)进行这些操作。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部