HarmonyOS window.createWindow模拟实现dialog

通过使用window.createWindow模拟实现dialog,发现在dialog中点击进入二级页面,在二级页面中的物理返回按键会失效

HarmonyOS
2024-12-20 15:42:48
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

通过createSubWindow创建子窗口规避此问题,可参考此demo:

//EntryAbility.ets文件

onWindowStageCreate(windowStage: window.WindowStage): void {
  // Main window is created, set main page for this ability
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

  windowStage.loadContent('pages/Index', (err, data) => {
  if (err.code) {
  hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
  return;
}
AppStorage.setOrCreate("windowStage", windowStage);
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
});
}


//主页面index.ets
import { window } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State message: string = '创建子窗口';
  @State windowStage: window.WindowStage = AppStorage.get("windowStage") as window.WindowStage
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            this.windowStage.createSubWindow("mySubWindow", (err, windowClass) => {
              if (err.code > 0) {
                console.error("failed to create subWindow Cause:" + err.message)
                return;
              }
              // 设置子窗口加载页
              try {
                windowClass.setUIContent("pages/subPage", () => {
                  windowClass.setWindowBackgroundColor("#00000000")
                });
                // 设置子窗口左上角坐标
                windowClass.moveWindowTo(0, 200)
                // 设置子窗口大小
                windowClass.resize(vp2px(300), vp2px(300))
                // 展示子窗口
                windowClass.showWindow();
                // 设置子窗口全屏化布局不避让安全区
                windowClass.setWindowLayoutFullScreen(true);
              } catch (err) {
                console.error("failed to create subWindow Cause:" + err)
              }
            })
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}


//子窗口subpage.ets
import { router, window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct SubPage {
  @State message: string = 'SUBPAGE';
  @State windowStage: window.WindowStage = AppStorage.get("windowStage") as window.WindowStage;

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
        Button("跳转")
          .onClick(() => {
            // 获取子窗口ID
            let subWindowID: number = window.findWindow("mySubWindow").getWindowProperties().id
            // 获取主窗口ID
            let mainWindowID: number = this.windowStage.getMainWindowSync().getWindowProperties().id
            // 将焦点从子窗口转移到主窗口
            let promise = window.shiftAppWindowFocus(subWindowID, mainWindowID);
            promise.then(() => {
              console.info('Succeeded in shifting app window focus');
            }).catch((err: BusinessError) => {
              console.error('Failed to shift app window focus. Cause: ' + JSON.stringify(err));
            })
            this.windowStage.getMainWindowSync().getUIContext().getRouter().pushUrl({ url: "pages/routerPage" }, router.RouterMode.Single);
          })
      }
      .width('100%')
    }
    .height('100%')
    .backgroundColor(Color.Red)
  }
}

//跳转页面routerPage.ets
@Entry
@Component
struct RouterPage {
  @State message: string = 'RouterPage';

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
    .backgroundColor(Color.Pink)
  }
}
分享
微博
QQ
微信
回复
2024-12-20 18:29:12
相关问题
window模拟器无法弹出软键盘
422浏览 • 1回复 待解决
如何实现全局dialog
992浏览 • 1回复 待解决
HarmonyOS Navigation实现Dialog转场动画
357浏览 • 1回复 待解决
HarmonyOS Dialog相关
209浏览 • 1回复 待解决
使用dialog窗口实现红包雨窗口创建
1250浏览 • 1回复 待解决
鸿蒙怎么实现自定义布局的Dialog
9587浏览 • 2回复 已解决
HarmonyOS NavDestinationMode.DIALOG
225浏览 • 1回复 待解决
HarmonyOS NativeXComponent获取window问题
451浏览 • 1回复 待解决
dialog跳转新页面返回后dialog关闭
645浏览 • 1回复 待解决
HarmonyOS HMRouter使用 Dialog模式?
440浏览 • 0回复 待解决
HarmonyOS dialog弹窗相关问题
796浏览 • 1回复 待解决