HarmonyOS 创建子window后横竖屏切换问题

要实现应用内全局页面底部悬浮框功能,目前使用方案如下:

//创建子window
window.WindowStage.createSubWindow->
  //移动到底部位置
this.subWindow.moveWindowTo()
//重新调整大小
this.subWindow.resize()

在resize后,subWindow.on(‘windowSizeChange’)没有回调,导致横竖屏切换时未能及时调整window的大小和位置。

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

可以使用Orientation获取到窗口显示方向,具体内容请参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5#orientation9

示例参考如下:

import { AbilityConstant, UIAbility, Want, Configuration } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
import { BusinessError } from '@ohos.base';
import display from '@ohos.display';

let windowStage_: window.WindowStage | null = null;
let resClass: window.Window;

export default class EntryAbility extends UIAbility {
  showSubWindow() {
    // 1.创建应用子窗口。
    if (windowStage_ == null) {
      console.error('Failed to create the subwindow. Cause: windowStage_ is null');
    } else {
      windowStage_.createSubWindow("mySubWindow", (err: BusinessError, windowClass) => {
        resClass = windowClass;
        let errCode: number = err.code;
        if (errCode) {
          console.error('Failed to create the subwindow. Cause: ' + JSON.stringify(err));
          return;
        }
        // 设置子窗口加载页
        windowClass.setUIContent('pages/page3', () => {
          resClass.setWindowBackgroundColor('#00000000');
        });
        // 设置子窗口左上角坐标
        resClass.moveWindowTo(0, 2000);
        // 设置子窗口大小
        resClass.resize(vp2px(500), vp2px(100));
        // 展示子窗口
        resClass.showWindow();
        // 设置子窗口全屏化布局不避让安全区
        resClass.setWindowLayoutFullScreen(true);
      })
    }
  }

  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  }

  onConfigurationUpdate(newConfig: Configuration): void {
    // 获取横竖屏
    let status = display.getDefaultDisplaySync().orientation;
    if (status === 3 || status == 1) {
      resClass.moveWindowTo(0, 800);
    } else {
      resClass.moveWindowTo(0, 2000);
    }
  }

  onDestroy(): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }

  onWindowStageCreate(windowStage: window.WindowStage): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
    windowStage_ = windowStage;
    windowStage.loadContent('pages/Index', (err) => {
      if (err.code) {
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
        return;
      }
      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
    });
    this.showSubWindow();
  }

  onWindowStageDestroy(): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  }

  onForeground(): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  }

  onBackground(): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 横竖切换问题
38浏览 • 1回复 待解决
HarmonyOS 横竖切换
19浏览 • 1回复 待解决
HarmonyOS 监听横竖切换
30浏览 • 1回复 待解决
HarmonyOS 平板无法正确横竖切换
16浏览 • 1回复 待解决
HarmonyOS 横竖切换实现过于繁琐
104浏览 • 1回复 待解决
求大佬告知如何切换横竖
2101浏览 • 1回复 待解决
如何进行页面横竖切换
2008浏览 • 1回复 待解决
页面横竖如何进行切换
475浏览 • 1回复 待解决
HarmonyOS 小窗下如何实现横竖切换
16浏览 • 1回复 待解决
HarmonyOS 横竖设置问题
24浏览 • 1回复 待解决
HarmonyOS 设置横竖问题
24浏览 • 1回复 待解决
如何监听手机屏幕的横竖切换
472浏览 • 1回复 待解决
鸿蒙横竖切换监听,需要这个功能
11406浏览 • 3回复 已解决
如何实现page页面的横竖切换
543浏览 • 1回复 待解决
如何监听设备横竖切换状态呢
1719浏览 • 1回复 待解决
鸿蒙JS 框架中如何主动切换横竖?
4842浏览 • 1回复 待解决