HarmonyOS Next如何配置支持智慧多窗?

阅读 565
avatarAI BotBETA

HarmonyOS Next配置支持智慧多窗的方法如下:

配置文件声明

当应用需要智慧多窗的能力时,可以通过在module.json5配置文件中对应标签添加相关字段声明支持,具体配置如下:

  • 悬浮窗:开发者可以通过在module.json5配置文件中abilities标签下的supportWindowMode属性增加“floating”字段或使用默认值以声明应用支持悬浮窗。supportWindowMode属性主要标识当前UIAbility所支持的窗口模式。
  • 分屏:开发者可以通过在module.json5配置文件中abilities标签下的supportWindowMode属性增加“split”字段或使用默认值以声明应用支持分屏。
  • 横向悬浮窗:当应用需要支持横向悬浮窗时,开发者可以通过在module.json5配置文件中abilities标签下的preferMultiWindowOrientation属性增加“landscape”或者“landscape_auto”配合API以声明应用支持横向悬浮窗。preferMultiWindowOrientation属性主要标识当前UIAbility组件多窗布局方向。

自适应布局

由于应用从全屏进入智慧多窗(悬浮窗/分屏)模式后,窗口尺寸、宽高比例会发生变化,所以需要开发者适配应用窗口在不同尺寸、不同比例下的自适应布局,以确保应用窗口在各种形态下都能呈现出最佳的视觉效果,提供更好的用户体验。主要可以通过窗口的on(‘windowSizeChange’)方法实现对窗口尺寸大小变化的监听,再根据窗口的尺寸变化更新调整自身应用布局以实现适配。

以下是实现应用布局自适应的示例代码:

import { UIAbility } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';

export default class EntryAbility extends UIAbility {
  onWindowStageCreate(windowStage: window.WindowStage): void {
    console.info('Ability onWindowStageCreate.');
    windowStage.getMainWindow().then((windowClass) => {
      // 获取窗口尺寸,存入AppStorage
      AppStorage.setOrCreate('winWidth', windowClass.getWindowProperties().windowRect.width);
      AppStorage.setOrCreate('winHeight', windowClass.getWindowProperties().windowRect.height);

      // 监听窗口尺寸变化
      windowClass.on('windowSizeChange', (windowSize) => {
        AppStorage.setOrCreate('winWidth', windowSize.width);
        AppStorage.setOrCreate('winHeight', windowSize.height);
      });
    });
    windowStage.loadContent('pages/Index', (err) => {
      if (err.code) {
        console.error('Failed to load the content. Cause: ' + JSON.stringify(err));
      }
    });
  }
}

onWindowStageCreate方法中,获取Window对象,通过getWindowProperties方法返回值中的windowRect获取窗口尺寸,写入AppStorage中用于UI侧窗口尺寸的首次初始化赋值。使用on('windowSizeChange')注册窗口尺寸变化时的监听,并写入AppStorage中供UI侧布局使用。UI侧通过@StorageLink绑定窗口尺寸后,AppStorage中属性key值对应的数据一旦改变,UI侧会同步修改。@StorageLink装饰的数据本身是状态变量,所以窗口尺寸发生变化时,会引起组件的重新渲染,开发者可以根据最新的窗口尺寸动态调整应用布局。

通过以上配置和代码实现,HarmonyOS Next应用即可支持智慧多窗功能,为用户提供更加高效的多任务处理体验。

1 个回答

当应用需要配置是否支持悬浮窗/分屏能力时,可以通过在module.json5配置文件中abilities标签下添加supportWindowMode字段来实现,supportWindowMode属性主要标识当前UIAbility所支持的窗口模式

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

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