HarmonyOS windowObj.on("windowSizeChange", onChange),转屏时候触发,获取的设备方向是转屏之前的,宽高是转屏之后的

HarmonyOS
2024-12-25 11:26:52
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
fox280

OpenHarmony window 和 display之间时序问题

window和display是两个服务,处于不同的进程中,但旋转的时候两个模块都会涉及,有时三方应用用法不对会出现时序问题,旋转完后display的更新时间早于window的更新时间(display旋转时直接宽高互换,提前可预知,window涉及ArkUI布局完才知道窗口大小,耗时长)

常见问题为:

1、有时候旋转监听window.on(‘windowSizeChange’)会没收到回调

因为在window侧如果窗口大小没发生变化,此监听不会被触发,如果直接旋转180度的情况下,窗口大小并没有改变,此时不会通知回调,可改用监听display.on('change')来获取窗口的大小方向。

2、监听display.on('change')来获取windowClass.getWindowProperties().windowRect.width(height)错误

display触发变化时window侧还没更新完成,此时获取到的width(height)还是原来的宽高,可通过从display获取width(height)信息

3、window侧监听不到orientation(方向)信息,如果想获取orientation信息,需要从display.on('change')来获取

4、通过一个监听既想获取orientation信息,又想获取avoidAreaChange信息

错误用法:监听display.on('change')来获取window的属性

let callback: Callback<number> = (data: number) => {
  let dis: display.Display = display.getDefaultDisplaySync();
  dis.orientation;  //方向信息
  let windowClass: window.Window = await window.getLastWindow(this.context)
  getWindowAvoidArea(window.AvoidAreaType.TYPE_CUTOUT); // 后更新
};
try {
  display.on("change", callback);  // 先更新
} catch (exception) {
  console.error('xxx: display.on Failed to register callback. Code: ' + JSON.stringify(exception));
}

正确用法:监听window.on('avoidAreaChange')来获取display的orientation属性

try {
  windowClass.on('avoidAreaChange', (data) => {
    console.info('行行行: avoidAreaChange Succeeded in enabling the listener for avoid area changes. type:' +
    JSON.stringify(data.type) + ', area: ' + JSON.stringify(data.area));
    let dis: display.Display = display.getDefaultDisplaySync();
    let ori = dis.orientation;
    console.error(`xxx: ori: ` + ori);
  });
} catch (exception) {
  console.error('Failed to enable the listener for avoid area changes. Cause: ' + JSON.stringify(exception));
}
分享
微博
QQ
微信
回复
2024-12-25 14:13:29
相关问题
HarmonyOS 如何根据设备设置支持
212浏览 • 1回复 待解决
HarmonyOS后视频画面90度显示
731浏览 • 1回复 待解决
HarmonyOS状态下获取组件
617浏览 • 1回复 待解决
如何获取当前还是竖啊?
5157浏览 • 1回复 待解决
HarmonyOS 应用横竖如何配置
113浏览 • 1回复 待解决
如何获取设备横竖状态变化通知
2128浏览 • 1回复 待解决
HarmonyOS ACSII字符方法
121浏览 • 1回复 待解决
HarmonyOS 需要dpvp指南
238浏览 • 1回复 待解决
HarmonyOS 播放视频时候禁止息
216浏览 • 1回复 待解决
HarmonyOS 图片pdf
233浏览 • 1回复 待解决
如何设置屏幕方向为横
1609浏览 • 1回复 待解决
HarmonyOS 关于jsonmodel处理
201浏览 • 1回复 待解决