写点什么

【HarmonyOS NEXT】鸿蒙应用如何进行页面横竖屏切换以及注意事项,自动切换横竖屏,监听横竖屏

作者:GeorgeGcs
  • 2025-03-24
    上海
  • 本文字数:1667 字

    阅读完需:约 5 分钟

【HarmonyOS NEXT】鸿蒙应用如何进行页面横竖屏切换以及注意事项,自动切换横竖屏,监听横竖屏

【HarmonyOS NEXT】鸿蒙应用如何进行页面横竖屏切换以及注意事项,自动切换横竖屏,监听横竖屏

一、鸿蒙应用如何进行页面横竖屏调用 API 手动切换

1.首先要在 EntryAbility 中获取主窗口对象 EntryAbility.ets


import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';import { window } from '@kit.ArkUI';
export default class EntryAbility extends UIAbility {
onWindowStageCreate(windowStage: window.WindowStage): void { // 挂载globalThis上,可以当全局对象使用。当然此处实现方式因人而异,你可以放在单例里,或者localstore中等等 globalThis.windowClass = windowStage.getMainWindowSync(); windowStage.loadContent('pages/RotationTestPage', (err) => { if (err.code) { return; } }); }}
复制代码


之后在需要调用横竖屏切换的页面或者逻辑中调用,我这里用按钮触发举例:RotationTestPage.ets


import { BusinessError } from '@kit.BasicServicesKit';import { window } from '@kit.ArkUI';
@Entry@Componentstruct RotationTestPage { private TAG: string = "RotationTestPage";
onClickRotation = ()=>{ // 设置横竖屏状态 let orientation = window.Orientation.LANDSCAPE; try{ globalThis.windowClass.setPreferredOrientation(orientation, (err: BusinessError) => { if(err.code){ console.error(this.TAG, 'Failed to set window orientation. Cause: ' + JSON.stringify(err)); return; } console.info(this.TAG,'Succeeded in setting window orientation.'); }); }catch (exception) { console.error(this.TAG,'Failed to set window orientation. Cause: ' + JSON.stringify(exception)); } }
build() { RelativeContainer() { Text("点击切换为横屏") .id('RotationTestPageHelloWorld') .fontSize(50) .fontWeight(FontWeight.Bold) .alignRules({ center: { anchor: '__container__', align: VerticalAlign.Center }, middle: { anchor: '__container__', align: HorizontalAlign.Center } }) .onClick(this.onClickRotation) } .height('100%') .width('100%') }}
复制代码


window.Orientation具体数值,参见以下网址


注意:设置主窗口的显示方向属性。仅在支持跟随 sensor 旋转的设备上生效,子窗口调用后不生效。

二、如何实现应用的屏幕自动旋转

在 module.json5 添加属性"orientation": "auto_rotation"。


"abilities": [   {     "name": "EntryAbility",     "srcEntry": "./ets/entryability/EntryAbility.ets",     "description": "$string:EntryAbility_desc",     "icon": "$media:icon",     "label": "$string:EntryAbility_label",     "startWindowIcon": "$media:startIcon",     "startWindowBackground": "$color:start_window_background",     "exported": true,     "skills": [       {         "entities": [           "entity.system.home"         ],         "actions": [           "action.system.home"         ]       }     ],     "orientation": "auto_rotation", // 随传感器旋转   } ]
复制代码


注意:auto_rotation 随传感器旋转 需要在系统下滑菜单中,放开自动锁定状态才可生效。

三、如何监听屏幕旋转

使用媒体查询接口监听屏幕旋转


import { mediaquery } from '@kit.ArkUI'; let listener = mediaquery.matchMediaSync('(orientation: landscape)'); // 监听横屏事件 function onPortrait(mediaQueryResult: mediaquery.MediaQueryResult) {   if (mediaQueryResult.matches) {    // do something here   } else {    // do something here   } } listener.on('change', onPortrait) // 注册回调 listener.off('change', onPortrait) // 去注册回调
复制代码


发布于: 刚刚阅读数: 6
用户头像

GeorgeGcs

关注

路漫漫其修远兮,吾将上下而求索。 2024-12-24 加入

历经腾讯,宝马,研究所,金融。 待过私企,外企,央企。 深耕大应用开发领域十年。 OpenHarmony,HarmonyOS,Flutter,H5,Android,IOS。 目前任职鸿蒙应用架构师。 HarmonyOS官方认证创作先锋

评论

发布
暂无评论
【HarmonyOS NEXT】鸿蒙应用如何进行页面横竖屏切换以及注意事项,自动切换横竖屏,监听横竖屏_鸿蒙应用_GeorgeGcs_InfoQ写作社区