#鸿蒙通关秘籍#如何在HarmonyOS Next中适配挖孔屏?

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
OS白雪皑皑

步骤如下:

  1. 设置窗口为全屏:
    调用 getLastWindow 获取窗口实例,使用 setWindowLayoutFullScreen 设置窗口为全屏,setWindowSystemBarEnable 隐藏顶部状态栏。

    window.getLastWindow(this.context, (err, data) => {
      if (err) {
        logger.error('DiggingHoleScreen', 'getLastWindow failed. error is:', JSON.stringify(err));
        return;
      }
      data.setWindowLayoutFullScreen(true);
      data.setWindowSystemBarEnable(['navigation']);
    });
    
  2. 获取不可用区域信息:
    使用 getDefaultDisplaySyncgetCutoutInfo 获取窗口的 display 对象和不可用区域的边界、宽高。

    this.displayClass = display.getDefaultDisplaySync();
    this.displayClass.getCutoutInfo((err, data) => {
      if (err) {
        logger.error('DiggingHoleScreen', 'getCutoutInfo failed. error is:', JSON.stringify(err));
        return;
      }
      this.boundingRect = data.boundingRects;
      this.topTextMargin = this.getBoundingRectPosition();
    });
    
  3. 计算偏移量适配不可用区域:
    通过获取的信息计算偏移量,实现对不可用区域的适配。

    getBoundingRectPosition(): TextMargin {
      if (this.boundingRect !== null && this.displayClass !== null && this.boundingRect[0] !== undefined) {
        let boundingRectRight: number = this.displayClass.width - (this.boundingRect[0].left + this.boundingRect[0].width);
        let boundingRectLeft: number = this.boundingRect[0].left;
        
        if (Math.abs(boundingRectLeft - boundingRectRight) <= 10) {
          return { left: 0, right: 0 };
        }
        if (boundingRectLeft > boundingRectRight) {
          return { left: 0, right: this.displayClass.width - boundingRectLeft };
        } else if (boundingRectLeft < boundingRectRight) {
          return { left: this.boundingRect[0].left + this.boundingRect[0].width, right: 0 };
        }
      }
      return { left: 0, right: 0 };
    }
    
分享
微博
QQ
微信
回复
1天前
相关问题
鸿蒙如何实现不规避
1787浏览 • 1回复 待解决
鸿蒙如何获取区域的高度啊
6011浏览 • 1回复 待解决