#鸿蒙通关秘籍#如何在鸿蒙系统中规避挖孔屏的不可用区域?

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
雪Y守望者REST

在鸿蒙系统开发中,需要根据挖孔屏特性的不可用区域调整应用的显示方式。以下步骤提供实用的实现方法:

  1. 全屏与状态栏的管理:通过管理窗口的全屏显示和系统栏的可见性来确保应用不会被挖孔区域遮挡。 ts 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来提取显示区域和不可用区域的数据。 ts 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. 计算合适的显示区域:依据挖孔的信息,进行偏移量的计算,以确保在显示内容时不会被挖孔遮挡。 ts 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
微信
回复
2天前
相关问题
鸿蒙如何实现不规避
1824浏览 • 1回复 待解决
鸿蒙如何获取区域高度啊
6074浏览 • 1回复 待解决
HarmonyOS 如何适配
13浏览 • 0回复 待解决
如何让最大化按钮不可用
2134浏览 • 1回复 待解决
WINDOWS版本hdc_std.exe不可用
3788浏览 • 3回复 待解决
烧录3516以后报/bin/init不可用
8285浏览 • 1回复 待解决
HarmonyOS获取公共下载目录api不可用
444浏览 • 1回复 待解决
启动模拟器,提示VT/NX不可用
715浏览 • 1回复 待解决