HarmonyOS Next中如何监听横竖屏切换?

阅读 674
avatarAI BotBETA
在 HarmonyOS Next 中,要监听横竖屏切换,可以通过配置 `config.json` 文件和使用系统提供的屏幕方向变化回调来实现。

1. **配置 `config.json` 文件**:
   确保你的 `config.json` 文件中已经配置了允许屏幕方向变化。例如:

"module": {

 "package": "your.package.name",
 "type": "entry",
 "distro": {
   "moduleName": "entry",
   "moduleType": "entry",
   "deliveryWithInstall": true,
   "abilities": [
     {
       "name": "your.ability.name",
       "label": "Your Ability",
       "icon": "$media:icon",
       "description": "$string:mainability_description",
       "visible": true,
       "launchType": "singleton",
       "width": "match_parent",
       "height": "match_parent",
       "orientation": "unspecified"  // 允许屏幕方向变化
     }
   ]
 }

}


这里的关键是设置 `orientation` 为 `"unspecified"`,表示不限制屏幕方向。

2. **监听屏幕方向变化**:
在你的 Ability 或 Page 中,你可以通过重写 `onConfigurationChanged` 方法来监听屏幕方向的变化。例如:

import ohos.aafwk.ability.Ability;
import ohos.agp.components.Component;
import ohos.bundle.IBundleManager;
import ohos.multimodalinput.event.ConfigurationEvent;

public class YourAbility extends Ability {

   @Override
   protected void onStart(Intent intent) {
       super.onStart(intent);
       super.setUIContent(ResourceTable.Layout_ability_main);
   }

   @Override
   public void onConfigurationChanged(ConfigurationEvent newConfig) {
       super.onConfigurationChanged(newConfig);
       // 检查屏幕方向变化
       if (newConfig.getOrientation() == ConfigurationEvent.ORIENTATION_LANDSCAPE) {
           // 横屏处理逻辑
       } else if (newConfig.getOrientation() == ConfigurationEvent.ORIENTATION_PORTRAIT) {
           // 竖屏处理逻辑
       }
   }

}


在 `onConfigurationChanged` 方法中,你可以通过 `ConfigurationEvent` 对象获取当前的屏幕方向,并根据需要进行处理。
1 个回答

由于传感器变化或者用户手动设置窗口方向时,窗口的显示会发生变化,对应窗口的尺寸也会发生改变,此时可以通过拿到窗口的宽高,并对宽高进行对比,判断当前显示是竖屏还是横屏状态,并利用该数据对布局进行适配。

监听窗口尺寸的变化可以通过window.on('windowSizeChange')进行实现。具体的措施如下,在需要进行横竖屏切换的页面进行以下窗口的监听,一般建议是在aboutToAppear中执行:

aboutToAppear(): void {
  // ...
  this.windowClass.on('windowSizeChange', (size) => {
    // ...
  });
  // ...
}

并在aboutToDisappear中取消监听:

aboutToDisappear(): void {
  // ...
  this.windowClass.off('windowSizeChange');
}

当用户手动触发setOrientation设置为横屏状态时,即使当前手机处于垂直方向,窗口的状态也是横屏方向,窗口的宽是竖屏状态下的高,高变为竖屏状态的宽。所以在监听窗口变化时,可以通过窗口的宽高大小关系,来确定当前窗口的方向,并决定实际的横竖屏状态。

this.windowClass.on('windowSizeChange', (size) => {
  let viewWidth = px2vp(size.width);
  let viewHeight = px2vp(size.height);

  if (viewWidth > viewHeight) {
    // ...
  } else {
    // ...
  }
});

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题