【鸿蒙南向开发】OpenHarmony如何切换横竖屏?

前言

在日常开发中,大多APP可能根据实际情况直接将APP的界面方向固定,或竖屏或横屏。但在使用过程中,我们还是会遇到横竖屏切换的功能需求,可能是通过物理重力感应触发,也有可能是用户手动触发。所以本文主要带大家了解在OpenAtom OpenHarmony(以下简称“OpenHarmony”)应用开发的过程中,如何在Stage模型和FA模型下使用对应的接口去完成横竖屏的切换。
本文中OpenHarmony版本为3.2 Beta4,API版本为9。开发板为DAYU200。

FA模型

FA模型下,setDisplayOrientation和setDisplayOrientation是切换横竖屏的接口。

文档:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-inner-app-context.md#contextsetdisplayorientation7

context.setDisplayOrientation
setDisplayOrientation(orientation: bundle.DisplayOrientation, callback: AsyncCallback): void
设置当前能力的显示方向(callback形式)。

系统能力:
SystemCapability.Ability.AbilityRuntime.Core

参数:
在这里插入图片描述

示例:

import featureAbility from '@ohos.ability.featureAbility';
import bundle from '@ohos.bundle';
//FA模型下获取context
var context = featureAbility.getContext();
var orientation = bundle.DisplayOrientation.UNSPECIFIED;
context.setDisplayOrientation(orientation, (err) => {
    console.info("setDisplayOrientation err: " + JSON.stringify(err));
});

完整代码

import bundle from '@ohos.bundle';
import featureAbility from '@ohos.ability.featureAbility';
@Entry
@Component
struct Index {
  @State message: string = '横竖屏切换 '
  @State portrait: boolean = true

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(30)
          .fontWeight(FontWeight.Bold).onClick(() => {
          var context = featureAbility.getContext();
          if (this.portrait) {

            // 横屏
            var orientation = bundle.DisplayOrientation.LANDSCAPE;
            context.setDisplayOrientation(orientation, (err) => {
              this.portrait = !this.portrait
              console.info("setDisplayOrientation err: " + JSON.stringify(err));
            });
          } else {
            //竖屏
            v
### 鸿蒙开发中检测屏幕方向的方法 在鸿蒙操作系统(HarmonyOS)应用开发过程中,为了响应不同设备姿态下的用户体验需求,开发者可以通过特定API获取当前的屏幕方向。具体来说,在JavaScript UI框架下,能够利用`@ohos.sensor`模块中的加速度传感器数据间接推断屏幕朝向;而在ArkTS(声明式高效开发语言)环境下,则有更为简便的方式——借助于系统提供的窗口管理服务接口。 对于想要直接监听并处理屏幕旋转事件的应用程序而言,推荐采用订阅配置变更通知的方式来实现这一目标[^1]: ```typescript // 订阅配置变化,特别是关注orientation字段的变化情况 import window from '@ohos.window'; let configChangeListener = { onConfigChanged(newConfig) { console.info(`New orientation: ${newConfig.orientation}`); // newConfig.orientation 可能取值如下: // 0 - undefined (未知状态) // 1 - portrait (纵向模式) // 2 - landscape (横向模式) // 3 - sensorLandscape (感应器决定的横向模式) // 4 - reversePortrait (反转后的纵向模式) // 5 - reverseLandscape (反转后的横向模式) // 根据实际业务逻辑做出相应调整... } }; window.on('configuration', configChangeListener); ``` 上述代码片段展示了如何通过注册配置改变监听器来捕捉屏幕方向变动的情况,并据此执行相应的操作。每当设备物理位置发生变化导致显示角度切换时,该回调函数就会被触发一次,从而允许应用程序及时感知最新的布局方位。 此外,值得注意的是,在某些场景下可能还需要考虑更复杂的交互行为,比如当用户的手指触控接近页面边缘时是否应该触发翻页动作等问题,这涉及到触摸手势识别以及边界条件判断等方面的知识[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值