HarmonyOS鸿蒙Next中ArkUI使能旋转屏幕是改那个配置文件?
HarmonyOS鸿蒙Next中ArkUI使能自动旋转屏幕,是改那个配置文件?
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使能屏幕旋转功能不需要修改配置文件,而是通过代码设置。具体实现方式如下:
- 在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 - 反向横屏
});
}
- 确保在config.json中已声明屏幕方向权限:
"abilities": [
{
"orientation": "unspecified" // 或指定具体方向
}
]
注意:实际旋转行为还受设备设置和应用manifest配置的限制。