HarmonyOS 鸿蒙Next 折叠屏设备折叠时,如何解决获取到屏幕尺寸延迟的问题

发布于 1周前 作者 wuwangju 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 折叠屏设备折叠时,如何解决获取到屏幕尺寸延迟的问题 鸿蒙场景化案例

【问题现象】

  1. 添加折叠屏设备的折叠监听,折叠完成(回调FOLD_STATUS_FOLDED|FOLD_STATUS_EXPANDED)后立即获取屏幕size仍是折叠状态变更前的尺寸,

    需延迟

    (如50ms)才能获取当前状态的屏幕尺寸。

    FolderStack({
      }.onFolderStateChange((msg) => {
        this.status = msg.foldStatus.toString();
        display.getAllDisplays((err, data) => {
          let screenWidth: number = data[0].width
          let screenHeight: number = data[0].height
          this.width1 = 'width = ' + screenWidth;
          this.height1 = 'height = ' + screenHeight;
          console.log('width = ' + screenWidth + ', height = ' + screenHeight)
        })
      })
    

【背景知识】

【定位思路】

基于现象和问题代码,再查阅相关API可以发现,问题代码调用了异步获取屏幕尺寸的方法,所以获取屏幕尺寸存在时延。

【解决方案】

HarmonyOS有提供同步获取屏幕尺寸的方法getDefaultDisplaySync(): Display。

代码示例如下:

FolderStack({
  }.onFolderStateChange((msg) => {
    let displayClass: display.Display | null = null;
    displayClass = display.getDefaultDisplaySync(); // 修改为同步方法

    this.width1 = displayClass.width;
    this.height1 = displayClass.height;
  }))
1 回复

作为IT专家,对于HarmonyOS 鸿蒙Next在折叠屏设备折叠时获取屏幕尺寸延迟的问题,以下是一些专业见解:

HarmonyOS在折叠屏设备上的适配,需要开发者关注设备的折叠状态变化。当设备折叠时,屏幕尺寸会发生变化,这可能导致应用界面出现延迟或布局错乱。为了解决这一问题,开发者可以使用display.on('foldDisplayModeChange') API来监听折叠屏设备的折叠状态变化,并在回调函数中处理屏幕尺寸的变化。

在监听到折叠状态变化后,开发者可以获取当前的屏幕尺寸,并重新布局界面。此外,还可以考虑在折叠屏展开和折叠时,采用不同的布局策略,以提供更好的用户体验。

值得注意的是,在折叠屏设备上进行开发时,还需要考虑其他因素,如挖孔区避让、横竖屏适配等。这些因素都可能影响屏幕尺寸的获取和界面的布局。

如果开发者在监听折叠状态变化并处理屏幕尺寸变化后,仍然遇到延迟问题,可以考虑优化应用的性能,如减少不必要的界面渲染、优化布局逻辑等。

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

回到顶部