HarmonyOS 怎样获取FrameNode含expandSafeArea的位置大小

使用getMeasuredSize和getPositionToWindow可以获取到FrameNode的大小和位置,但是不包含expandSafeArea扩展出来的区域,怎样才能获取到expandSafeArea扩展后的背景大小。

HarmonyOS
2024-12-26 14:32:35
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

可以通过getRectangleById获取组件大小。

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-arkui-uicontext-V5#getrectanglebyid

参考demo:

// xxx.ets
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
import { ComponentUtils, Font, PromptAction, Router, UIInspector, MediaQuery } from '@ohos.arkui.UIContext';
@Entry
@Component
struct SafeAreaExample1 {
  @State text: string = ''
  controller: TextInputController = new TextInputController()
  getSafeArea(){
    console.info("进入点击事件")
    window.getLastWindow(getContext(this), (err: BusinessError, data) => {
      let windowClass: window.Window  = data;
      let topAvoidArea = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM)
      let bottomAvoidArea = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR)
      let bottomRectHeight = px2vp(bottomAvoidArea.bottomRect.height)
      let topRectHeight = px2vp(topAvoidArea.topRect.height)
      console.info("topAvoidArea:",bottomRectHeight)
      console.info("bottomAvoidArea:",topRectHeight)
    })
  }
  getAreaById(){
    let context = this.getUIContext()
    let componentUtils:ComponentUtils = context.getComponentUtils();
    let modePosition = componentUtils.getRectangleById("out");
    let localOffsetWidth = modePosition.size.width;
    let localOffsetHeight = modePosition.size.height;
    console.info("localOffsetWidth:", px2vp(localOffsetWidth))
    console.info("localOffsetHeight:",px2vp(localOffsetHeight))
  }
  build() {
    Row() {
      Column()
        .id('out')
        .height('100%').width('100%')
        .backgroundImage($r('app.media.background')).backgroundImageSize(ImageSize.Cover)
        .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP,SafeAreaEdge.BOTTOM])
        .onAreaChange((old:Area,newArea:Area)=>{
          console.info("新的Area:",JSON.stringify(newArea))
        })
        .onClick(()=>{
          this.getAreaById()
        });
    }.height('100%')
  }
}
分享
微博
QQ
微信
回复
2024-12-26 17:25:29
相关问题
如何获取元素位置大小
2358浏览 • 1回复 待解决
ArkTS获取组件位置大小接口
3588浏览 • 1回复 待解决
HarmonyOS NavDestinationexpandSafeArea问题
105浏览 • 1回复 待解决
HarmonyOS Progress 怎样自定义圆角大小
230浏览 • 1回复 待解决
HarmonyOS 如何获取组件位置
424浏览 • 1回复 待解决
HarmonyOS expandSafeArea不生效
501浏览 • 1回复 待解决
postgresql 如何插入 ‘ 数据?
3892浏览 • 2回复 待解决
HarmonyOS ArkUI获取元素坐标位置
168浏览 • 1回复 待解决
如何获取List实际大小
2150浏览 • 1回复 待解决
HarmonyOS 怎样获取系统音频延时
498浏览 • 1回复 待解决
HarmonyOS 如何获取设备显示大小
118浏览 • 1回复 待解决