相关问题
#鸿蒙通关秘籍#如何获取挖孔屏、刘海屏等不可用屏幕区域信息?
108浏览 • 1回复 待解决
鸿蒙如何实现不规避挖孔屏
1824浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS Next中适配挖孔屏?
118浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何为鸿蒙系统开发适配挖孔屏的应用?
30浏览 • 1回复 待解决
鸿蒙上如何获取挖孔区域的高度啊
6074浏览 • 1回复 待解决
HarmonyOS 如何适配挖孔屏
13浏览 • 0回复 待解决
#鸿蒙通关秘籍#在HarmonyOS应用开发中如何通过模块进行挖孔屏适配?
112浏览 • 1回复 待解决
hilog头文件里提到DEBUG级别日志在release环境不可用,这里的不可用是指系统会处理DEBUG日志
641浏览 • 1回复 待解决
如何让最大化按钮不可用
2134浏览 • 1回复 待解决
WINDOWS版本的hdc_std.exe不可用
3788浏览 • 3回复 待解决
烧录3516以后报/bin/init不可用
8285浏览 • 1回复 待解决
HarmonyOS获取公共下载目录api不可用
444浏览 • 1回复 待解决
启动模拟器,提示VT/NX不可用
715浏览 • 1回复 待解决
启动DevEco Studio本地模拟器,提示VT/NX不可用
7295浏览 • 1回复 待解决
HarmonyOS SM4加解密工具升级后不可用了
436浏览 • 1回复 待解决
网络监听不可用状态, netUnavailable 在Wifi情况下,不回调。
665浏览 • 1回复 待解决
是否可以提供屏幕“挖孔、刘海”信息
1797浏览 • 1回复 待解决
uniapp打包成h5产物后,uniapp的方法是都不可用了吗?
251浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙页面中添加标题和文本区域?
110浏览 • 1回复 待解决
HarmonyOS 相机帧二次处理,监听到相机不可用 CAMERA_STATUS_UNAVAILABLE
299浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙应用中监听锁屏状态的变化?
66浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何在鸿蒙系统中实现折叠屏音乐播放器的自适应动态布局?
106浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中设置FeatureAbility的显示方向?
86浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中设置GridCol组件的宽度?
69浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中接收他人共享的文件?
38浏览 • 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']); });
获取屏幕和挖孔信息:运用系统接口
getDefaultDisplaySync
和getCutoutInfo
来提取显示区域和不可用区域的数据。 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(); });计算合适的显示区域:依据挖孔的信息,进行偏移量的计算,以确保在显示内容时不会被挖孔遮挡。 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 }; }