目录

应用横屏打开会自动切换成竖屏

问题现象

应用横屏打开会自动切换为竖屏。

横屏状态图:

打开后切换为竖屏状态图:

背景知识

问题定位

  1. 考虑是否是应用设置了默认打开方式为竖屏导致。检查module.json5文件中是否配置了orientation字段,该字段的值指定了应用打开方式为横屏、竖屏或其他状态。

    指定竖屏打开状态如图:

    指定横屏打开状态如图:

  2. 对比发现问题中的横竖屏自动切换不是上图所示的横竖屏状态,考虑实际上发生横竖屏切换的是窗口而不是应用。检查EntryAbility.ets中onWindowStageCreate加载窗口时或者在应用打开时是否有以下变更窗口状态的类似操作:
    windowStage.getMainWindow((err: BusinessError, data) => {
      if (err) {
        // To do sth.
      }
      windowClass = data;
      let orientation = windowClass.getPreferredOrientation(); // 获取主窗口横竖屏状态
      if (orientation !== window.Orientation.PORTRAIT) {
        windowClass.setPreferredOrientation(window.Orientation.PORTRAIT) // 如果不是竖屏状态将主窗口设置为竖屏状态
      }
    })

分析结论

在窗口加载时主动变更了窗口状态导致。

修改建议

  1. 强制变更窗口状态会给用户比较差的使用体验,不必要的情况下建议不要在窗口加载时主动变更窗口状态。
  2. 如果应用只适配了竖屏,可以在module.json5中设置orientation为"portrait",指定应用打开方式为竖屏即可。参考配置module.json5的orientation字段。相反,如果应用只适配横屏则设置为横屏。