HarmonyOS 折叠屏获取宽度返回数据错误
注册折叠屏状态监听时,通过display.getDefaultDisplaySync().width获取屏幕宽度返回数据有误
通过以下方式获取折叠屏在不同状态下的屏幕宽度:
public init() {
display.on('foldStatusChange', (data: display.FoldStatus) => {
if (data == display.FoldStatus.FOLD_STATUS_FOLDED) {
console.info('Listening enabled. Data: ' + JSON.stringify(display.getDefaultDisplaySync()));
} else if (data == display.FoldStatus.FOLD_STATUS_EXPANDED) {
console.info('Listening enabled. Data: ' + JSON.stringify(display.getDefaultDisplaySync()));
}
})
}
分别得到如下结果
屏幕展开时:display.FoldStatus为1,宽度为2224
Listening enabled. Data: 1—display: {“id”:0,“name”:“UNKNOWN”,“alive”:true,“state”:2,“refreshRate”:120,“rotation”:0,“width”:2224,“height”:2496,“densityDPI”:500,“orientation”:0,“densityPixels”:3.125,“scaledDensity”:3.125,“xDPI”:401.2550048828125,“yDPI”:400.635009765625,“colorSpaces”:[0,9,10],“hdrFormats”:[1,2,3]}
合起屏幕使用外屏时:display.FoldStatus为2,宽度仍为2224
Listening enabled. Data: 2—display: {“id”:0,“name”:“UNKNOWN”,“alive”:true,“state”:2,“refreshRate”:60,“rotation”:0,“width”:2224,“height”:2496,“densityDPI”:500,“orientation”:0,“densityPixels”:3.125,“scaledDensity”:3.125,“xDPI”:401.2550048828125,“yDPI”:400.635009765625,“colorSpaces”:[0,9,10],“hdrFormats”:[1,2,3]}
经试验,只有在由收起到展开的过程中间态中即display.FoldStatus为3,
取得的宽度为正确的1080,(从展开到收起的中间态时获取的也是2224)
Listening enabled. Data: 3—display: {“id”:0,“name”:“UNKNOWN”,“alive”:true,“state”:2,“refreshRate”:60,“rotation”:0,“width”:1080,“height”:2504,“densityDPI”:500,“orientation”:0,“densityPixels”:3.125,“scaledDensity”:3.125,“xDPI”:415.635986328125,“yDPI”:415.6960144042969,“colorSpaces”:[0,9,10],“hdrFormats”:[1,2,3]}
这导致如果用户从展开状态打开app,再切换到收起状态,由于无法正确获取收起状态时小屏幕的宽度(一直都是2224,但收起状态应是1080),我们使用屏幕宽度比例做的一些ui适配出现显示错误的情况,请问该如何正确获取两种情况下的屏幕宽度?
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS 折叠屏折叠状态切换时屏幕宽度获取不对
384浏览 • 1回复 待解决
HarmonyOS 折叠屏变化时,获取屏幕宽度问题
564浏览 • 1回复 待解决
HarmonyOS 折叠屏webview宽度问题
752浏览 • 1回复 待解决
HarmonyOS 监听折叠屏打开关闭,获取屏幕宽度有时延
435浏览 • 1回复 待解决
HarmonyOS 折叠屏状态获取
377浏览 • 1回复 待解决
HarmonyOS CameraKit 折叠屏展开后获取的前置摄像头错误
884浏览 • 1回复 待解决
HarmonyOS 折叠屏展开的分屏状态下app怎么正确获取“屏幕”宽度?
370浏览 • 1回复 待解决
HarmonyOS 折叠屏处于半折叠态时,屏幕的宽度是怎么计算的?
242浏览 • 1回复 待解决
HarmonyOS 折叠屏获取屏幕尺寸问题
303浏览 • 1回复 待解决
HarmonyOS 适配折叠屏时,如何获取当前设备类型(手机/折叠屏手机/平板等)?
1258浏览 • 1回复 待解决
HarmonyOS 折叠屏状态的获取以及尺寸的获取
434浏览 • 1回复 待解决
HarmonyOS 折叠屏状态回调里面获取屏幕参数数据值异常
254浏览 • 1回复 待解决
如何区分折叠屏与非折叠屏手机?
645浏览 • 0回复 待解决
HarmonyOS 如何监听折叠屏展开折叠
485浏览 • 1回复 待解决
HarmonyOS 折叠屏怎么适配,折叠屏的悬停状态,以及折叠屏适配的指导文档
858浏览 • 1回复 待解决
HarmonyOS Swiper中item由于使用了Navigation,导致在折叠屏大屏上展示宽度异常
260浏览 • 1回复 待解决
HarmonyOS 如何监听折叠屏折叠状态变化
530浏览 • 1回复 待解决
HarmonyOS 折叠屏展开与关闭状态如何监听与屏幕宽度变化动态计算?
809浏览 • 1回复 待解决
HarmonyOS 监听折叠状态回调里获取屏幕宽度存在问题
1034浏览 • 1回复 待解决
折叠屏适配相关资料,折叠屏适配文档在哪里?
2639浏览 • 1回复 待解决
HarmonyOS 折叠屏适配资料
970浏览 • 1回复 待解决
HarmonyOS 折叠屏设备适配
490浏览 • 1回复 待解决
HarmonyOS Text获取每行数据宽度
228浏览 • 1回复 待解决
HarmonyOS 折叠屏监听问题
248浏览 • 1回复 待解决
折叠模式变更取屏幕宽高的场景下,应该监听foldDisplayModeChange,再用display.getDefaultDisplaySync()去取宽高
接口参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-display-V5#displayonfolddisplaymodechange10
foldstatus监听,就是通知折叠状态变化,折叠开合过程中超过半折态的阈值就会更新foldstatus,折叠开合改变了foldstatus以后还要去通知屏幕发生变化,更新屏幕数据,foldstatus的状态变化没有问题,屏幕处理折叠开合事件以后更新屏幕宽高,更新折叠屏显示模式;
display.on(foldstatus)通知的是foldstatus的变化,这个时候去查foldstatus是实时更新的,折叠开合流程还没结束,读到的属性是旧值没有意义
display.on(change)监听屏幕属性的变化,这个监听也是屏幕属性更新完触发,但这个不区分什么原因导致的屏幕属性变化
display.on(folddisplaymode)监听屏幕显示模式变化,是折叠开合显示模式切换过来以后再收到通知,收到这个回调去读屏幕属性是折叠开合流程结束的数据