HarmonyOS 鸿蒙Next中折叠屏获取宽度返回数据错误

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next中折叠屏获取宽度返回数据错误

注册折叠屏状态监听时,通过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

合起屏幕使用外屏时:display.FoldStatus为2,宽度仍为2224

经试验,只有在由收起到展开的过程中间态中即display.FoldStatus为3, 取得的宽度为正确的1080,(从展开到收起的中间态时获取的也是2224)

这导致如果用户从展开状态打开app,再切换到收起状态,由于无法正确获取收起状态时小屏幕的宽度(一直都是2224,但收起状态应是1080),目前需要使用屏幕宽度比例做的一些ui适配出现显示错误的情况,请问该如何正确获取两种情况下的屏幕宽度?


更多关于HarmonyOS 鸿蒙Next中折叠屏获取宽度返回数据错误的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

foldstatus监听,就是通知折叠状态变化,折叠开合过程中超过半折态的阈值就会更新foldstatus,折叠开合改变了foldstatus以后还要去通知屏幕发生变化,更新屏幕数据,foldstatus的状态变化没有问题,屏幕处理折叠开合事件以后更新屏幕宽高,更新折叠屏显示模式;

display.on(foldstatus)通知的是foldstatus的变化,这个时候去查foldstatus是实时更新的,折叠开合流程还没结束,读到的属性是旧值没有意义 display.on(change)监听屏幕属性的变化,这个监听也是屏幕属性更新完触发,但这个不区分什么原因导致的屏幕属性变化 display.on(folddisplaymode)监听屏幕显示模式变化,是折叠开合显示模式切换过来以后再收到通知,收到这个回调去读屏幕属性是折叠开合流程结束的数据

更多关于HarmonyOS 鸿蒙Next中折叠屏获取宽度返回数据错误的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,折叠屏获取宽度返回数据错误的问题,可能是由于系统对折叠屏状态监测或屏幕尺寸计算的逻辑出现偏差。鸿蒙系统在处理折叠屏设备时,需要动态调整屏幕尺寸信息,以适应不同的折叠状态。若获取的宽度数据错误,可能是系统未能正确识别当前折叠状态,或是在计算屏幕宽度时未考虑折叠屏的特殊结构。开发者应检查相关API调用,确保获取屏幕宽度的接口适用于折叠屏设备,并验证系统是否正确处理了折叠屏的尺寸变化逻辑。

在HarmonyOS鸿蒙Next中,若折叠屏获取宽度返回数据错误,可能是由于屏幕状态变化未及时更新或API调用方式不当。建议检查以下几点:

  1. 确保使用getDisplayMetrics()WindowManager获取屏幕宽度的API是最新的;

  2. 监听屏幕折叠状态变化事件,如onConfigurationChanged(),及时更新UI;

  3. 使用DisplayFeatureFoldableFeature相关API获取折叠屏的物理和逻辑宽度。

若问题持续,建议查看官方文档或提交工单获取技术支持。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!