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
2025-01-09 15:23:36
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

折叠模式变更取屏幕宽高的场景下,应该监听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)监听屏幕显示模式变化,是折叠开合显示模式切换过来以后再收到通知,收到这个回调去读屏幕属性是折叠开合流程结束的数据

分享
微博
QQ
微信
回复
2025-01-09 18:07:39
相关问题
HarmonyOS 折叠webview宽度问题
752浏览 • 1回复 待解决
HarmonyOS 折叠状态获取
377浏览 • 1回复 待解决
HarmonyOS 折叠获取屏幕尺寸问题
303浏览 • 1回复 待解决
如何区分折叠与非折叠手机?
645浏览 • 0回复 待解决
HarmonyOS 如何监听折叠展开折叠
485浏览 • 1回复 待解决
HarmonyOS 折叠适配资料
970浏览 • 1回复 待解决
HarmonyOS 折叠设备适配
490浏览 • 1回复 待解决
HarmonyOS Text获取每行数据宽度
228浏览 • 1回复 待解决
HarmonyOS 折叠监听问题
248浏览 • 1回复 待解决