跳转至

鸿蒙应用调整屏幕方向(竖屏,横屏,反向横屏,反向竖屏)

2025-08-22 创建文档
  • 2025-08-22 创建文档

开发环境

  • DevEco Studio 5.1.0 Release
  • ArkTS
  • nova14(HarmonyOS NEXT 5.1.0)

示例项目的配置

  • "modelVersion": "5.0.5"
  • "targetSdkVersion": "5.0.5(17)"
  • "compatibleSdkVersion": "5.0.5(17)"
  • "runtimeOS": "HarmonyOS"

鸿蒙应用屏幕方向示意图(来源鸿蒙官网)

鸿蒙应用屏幕方向示意图

应用预设为横屏

entry/src/main/module.json5中设定应用的默认方向 "orientation": "landscape"

{
  "module": {
    "abilities": [
      {
        "orientation": "landscape",

代码中调整屏幕的方向

使用的ArkUI的window

主要使用方法:

  • window.getPreferredOrientation() 获取当前屏幕方向
  • window.setPreferredOrientation 设置屏幕方向

获取窗口

  private context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  private windowClass = (this.context).windowStage.getMainWindowSync()

先获取当前方向,然后设置切换到下一个方向

  /**
   * 切换到下一个方向
   */
  private changeNextOrientation(windowClass: window.Window) {
    if (windowClass.getPreferredOrientation() == window.Orientation.LANDSCAPE) {
      windowClass.setPreferredOrientation(window.Orientation.PORTRAIT)
        .then(() => {
          hilog.info(1, "main", "切换成功" + windowClass.getPreferredOrientation());
        }).catch((err: Error) => {
        hilog.error(1, "main", "切换fail" + err);
      });
    } else if (windowClass.getPreferredOrientation() == window.Orientation.PORTRAIT) {
      windowClass.setPreferredOrientation(window.Orientation.LANDSCAPE_INVERTED)
        .then(() => {
          hilog.info(1, "main", "切换成功" + windowClass.getPreferredOrientation());
        }).catch((err: Error) => {
        hilog.error(1, "main", "切换fail" + err);
      });
    } else if (windowClass.getPreferredOrientation() == window.Orientation.LANDSCAPE_INVERTED) {
      windowClass.setPreferredOrientation(window.Orientation.PORTRAIT_INVERTED)
        .then(() => {
          hilog.info(1, "main", "切换成功" + windowClass.getPreferredOrientation());
        }).catch((err: Error) => {
        hilog.error(1, "main", "切换fail" + err);
      });
    } else {
      // - 横屏
      windowClass.setPreferredOrientation(window.Orientation.LANDSCAPE)
        .then(() => {
          hilog.info(1, "main", "切换成功" + windowClass.getPreferredOrientation());
        }).catch((err: Error) => {
        hilog.error(1, "main", "切换fail" + err);
      });
    }
  }

实例页面的完整代码如下:

import { common } from '@kit.AbilityKit'
import { window } from '@kit.ArkUI'
import { hilog } from '@kit.PerformanceAnalysisKit';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  private context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  private windowClass = (this.context).windowStage.getMainWindowSync()

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('HelloWorld')
        .fontSize($r('app.float.page_text_font_size'))
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          this.message = 'Welcome';
          hilog.info(1, "main", "当前:" + this.windowClass.getPreferredOrientation());
          this.changeNextOrientation(this.windowClass);
        })
    }
    .height('100%')
    .width('100%')
  }

  /**
   * 切换到下一个方向
   */
  private changeNextOrientation(windowClass: window.Window) {
    if (windowClass.getPreferredOrientation() == window.Orientation.LANDSCAPE) {
      windowClass.setPreferredOrientation(window.Orientation.PORTRAIT)
        .then(() => {
          hilog.info(1, "main", "切换成功" + windowClass.getPreferredOrientation());
        }).catch((err: Error) => {
        hilog.error(1, "main", "切换fail" + err);
      });
    } else if (windowClass.getPreferredOrientation() == window.Orientation.PORTRAIT) {
      windowClass.setPreferredOrientation(window.Orientation.LANDSCAPE_INVERTED)
        .then(() => {
          hilog.info(1, "main", "切换成功" + windowClass.getPreferredOrientation());
        }).catch((err: Error) => {
        hilog.error(1, "main", "切换fail" + err);
      });
    } else if (windowClass.getPreferredOrientation() == window.Orientation.LANDSCAPE_INVERTED) {
      windowClass.setPreferredOrientation(window.Orientation.PORTRAIT_INVERTED)
        .then(() => {
          hilog.info(1, "main", "切换成功" + windowClass.getPreferredOrientation());
        }).catch((err: Error) => {
        hilog.error(1, "main", "切换fail" + err);
      });
    } else {
      // - 横屏
      windowClass.setPreferredOrientation(window.Orientation.LANDSCAPE)
        .then(() => {
          hilog.info(1, "main", "切换成功" + windowClass.getPreferredOrientation());
        }).catch((err: Error) => {
        hilog.error(1, "main", "切换fail" + err);
      });
    }
  }
}

屏幕方向:

  • 横屏 window.Orientation.LANDSCAPE
  • 竖屏 window.Orientation.PORTRAIT_INVERTED
  • 反向横屏 window.Orientation.LANDSCAPE_INVERTED
  • 反向竖屏 window.Orientation.PORTRAIT_INVERTED

参考:

本站说明

一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~

📖AndroidTutorial 📚AndroidTutorial 🙋反馈问题 🔥最近更新 🍪投喂作者

Ads