HarmonyOS鸿蒙Next中ArkUI使能旋转屏幕是改那个配置文件?

HarmonyOS鸿蒙Next中ArkUI使能自动旋转屏幕,是改那个配置文件?

5 回复

module.json5配置文件中的abilities标签下设置orientation属性

启动方向枚举支持的取值如下:

  • unspecified:未指定方向,由系统自动判断显示方向。默认值
  • landscape:横屏。
  • portrait:竖屏。
  • follow_recent:跟随背景窗口的旋转模式。
  • landscape_inverted:反向横屏。
  • portrait_inverted:反向竖屏。
  • auto_rotation:随传感器旋转。
  • auto_rotation_landscape:传感器横屏旋转,包括横屏和反向横屏。
  • auto_rotation_portrait:传感器竖屏旋转,包括竖屏和反向竖屏。
  • auto_rotation_restricted:传感器开关打开,方向可随传感器旋转。
  • auto_rotation_landscape_restricted:传感器开关打开,方向可随传感器旋转为横屏, 包括横屏和反向横屏。
  • auto_rotation_portrait_restricted:传感器开关打开,方向随可传感器旋转为竖屏, 包括竖屏和反向竖屏。
  • locked:传感器开关关闭,方向锁定。
  • auto_rotation_unspecified:受开关控制和由系统判定的自动旋转模式。
  • follow_desktop:跟随桌面的旋转模式。

配置启动方向的资源索引时,取值为长度不超过255字节的字符串,配置示例:$string:orientation。

说明:

  • 从API version 14开始,支持配置启动方向资源索引。

文档配置示例:

{ “abilities”: [{ “name”: “EntryAbility”, “srcEntry”: “./ets/entryability/EntryAbility.ets”, “launchType”:“singleton”, “description”: “$string:description_main_ability”, “icon”: “$media:layered_image”, “label”: “Login”, “permissions”: [], “metadata”: [], “exported”: true, “continuable”: true, “skills”: [{ “actions”: [“ohos.want.action.home”], “entities”: [“entity.system.home”], “uris”: [] }], “backgroundModes”: [ “dataTransfer”, “audioPlayback”, “audioRecording”, “location”, “bluetoothInteraction”, “multiDeviceConnection”, “wifiInteraction”, “voip”, “taskKeeping” ], “startWindowIcon”: “$media:icon”, “startWindowBackground”: “$color:red”, “removeMissionAfterTerminate”: true, “orientation”: “$string:orientation”, “supportWindowMode”: [“fullscreen”, “split”, “floating”], “maxWindowRatio”: 3.5, “minWindowRatio”: 0.5, “maxWindowWidth”: 2560, “minWindowWidth”: 1400, “maxWindowHeight”: 300, “minWindowHeight”: 200, “excludeFromDock”: false, “preferMultiWindowOrientation”: “default”, “isolationProcess”: false, “continueType”: [ “continueType1”, “continueType2” ], “continueBundleName”: [ “com.example.myapplication1”, “com.example.myapplication2” ], “process”: “:processTag” }] }

更多关于HarmonyOS鸿蒙Next中ArkUI使能旋转屏幕是改那个配置文件?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


下面是四种监听屏幕旋转事件方案的优缺点及实用场景。

方案 优缺点 适用场景
display.on(‘change’) 使用便捷,但受module.json5配置信息的影响。 1. “orientation"指定为"auto_rotation”。
2. 适用于单个页面的旋转事件监听。
windowsSizeChange 生命周期内将持续保持监听状态,旋转数据需进行传递,且受module.json5配置信息的影响。 1. “orientation"指定为"auto_rotation”。
2. 适用于全局多个页面频繁旋转的监听机制。
sensor.SensorId.GRAVITY 不受module.json5配置信息的影响,传感器数据需要进行转换,目前不支持模拟器使用。 1. “orientation"指定为非"auto_rotation”。
2. 当前页面无需根据传感器的变动进行旋转,但仍需响应屏幕旋转而执行相应操作的业务场景。
mediaquery.matchMediaSync 该方案的使用较为便捷,然而其可用性受到module.json5配置文件信息的制约,不可在UIAbility的生命周期管理过程中直接调用,而需在完成组件实例的创建之后方可启用。此外,该方案当前无法识别屏幕旋转的横竖屏方向是正向还是反向。 1. “orientation"指定为"auto_rotation”。
2. 只需监听屏幕方向的横竖变化,无需关注横竖方向的具体正反向情况的业务场景。

除可在module.json5文件中全局配置当前UIAbility组件启动时的方向之外,亦可通过调用window.setPreferredOrientation方法动态设定特定页面的窗口方向,请根据具体的业务场景选择合适的方案来监听屏幕旋转事件。

继续扩展一下这个监听的点吧,监听屏幕旋转可以通过display.on(“change”) 来实现,并通过display.getDefaultDisplaySync() 获取屏幕示例对象,其中 rotation 属性用于显示设备的屏幕顺时针旋转角度。

可以参考一下这个文档:如何监听屏幕旋转事件-行业常见问题-实用工具类行业实践-行业实践 - 华为HarmonyOS开发者

在HarmonyOS Next中,ArkUI的屏幕旋转配置通过修改module.json5实现。在abilities节点下的对应ability中添加"orientation": "unspecified"配置项,可选值包括:

  • "unspecified"(默认,随传感器旋转)
  • "landscape"(强制横屏)
  • "portrait"(强制竖屏)
  • "followRecent"(跟随最近应用方向)

示例片段:

"abilities": [
  {
    "orientation": "unspecified"
  }
]

在HarmonyOS Next中,ArkUI使能屏幕旋转功能不需要修改配置文件,而是通过代码设置。具体实现方式如下:

  1. 在Ability的onWindowStageCreate()方法中设置窗口属性:
onWindowStageCreate(windowStage: window.WindowStage) {
    windowStage.getMainWindow().then((window) => {
        window.setPreferredOrientation(window.Orientation.UNSPECIFIED); // 允许自动旋转
        // 或者指定方向:
        // window.Orientation.PORTRAIT - 竖屏
        // window.Orientation.LANDSCAPE - 横屏
        // window.Orientation.PORTRAIT_INVERTED - 反向竖屏
        // window.Orientation.LANDSCAPE_INVERTED - 反向横屏
    });
}
  1. 确保在config.json中已声明屏幕方向权限:
"abilities": [
    {
        "orientation": "unspecified" // 或指定具体方向
    }
]

注意:实际旋转行为还受设备设置和应用manifest配置的限制。

回到顶部