HarmonyOS鸿蒙Next中自定义CustomDialog点击跳转到另一个page,如何避免覆盖CustomDialog跳转,保持dialog处于顶层?

HarmonyOS鸿蒙Next中自定义CustomDialog点击跳转到另一个page,如何避免覆盖CustomDialog跳转,保持dialog处于顶层? 自定义CustomDialog 中点击跳转到另一个page,不会覆盖CustomDialog跳转,上个page 的dialog还在,dialog一直处于顶层。

3 回复

CustomDialog 在以前的版本会自动关闭弹窗,从5.0.0.17版本(api12)后弹窗规格变化不会自动关闭,使用 router 切换时 CustomDialog 始终展示在最上层。

规格说明:规格说明

需要手动调用 close 方法在跳转时关闭弹窗,返回后重新拉起。

更多关于HarmonyOS鸿蒙Next中自定义CustomDialog点击跳转到另一个page,如何避免覆盖CustomDialog跳转,保持dialog处于顶层?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,自定义CustomDialog点击跳转到另一个页面时,可以通过以下方式避免覆盖CustomDialog跳转,保持dialog处于顶层:

  1. 使用show()方法:在跳转页面时,使用show()方法显示CustomDialog,确保其在跳转后仍然处于顶层。

  2. 设置setCancelable(false):通过设置setCancelable(false),防止用户在跳转时意外关闭CustomDialog。

  3. 使用WindowManager:通过WindowManager将CustomDialog设置为系统窗口,确保其在页面跳转时不会被覆盖。

  4. 生命周期管理:在页面跳转时,确保CustomDialog的生命周期与页面同步,避免因页面切换导致CustomDialog被销毁。

具体实现代码示例如下:

let customDialog = new CustomDialog(context);
customDialog.setCancelable(false);
customDialog.show();

// 跳转页面时保持CustomDialog显示
router.push({
  uri: 'pages/AnotherPage'
});

// 使用WindowManager设置CustomDialog为系统窗口
let windowManager = window.getWindowManager();
let layoutParams = new window.WindowManager.LayoutParams();
layoutParams.type = window.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
windowManager.addView(customDialog, layoutParams);

在HarmonyOS鸿蒙Next中,要避免自定义CustomDialog在点击跳转到另一个页面时被覆盖,可以采取以下方法:

  1. 使用异步跳转:在CustomDialog的点击事件中使用TaskDispatcher进行异步操作,确保跳转页面操作在UI线程之外执行,保持dialog处于顶层。

  2. 保持Dialog显示:在跳转页面之前,确保CustomDialog仍然显示在屏幕上。可以通过show()方法保持dialog的显示状态。

  3. 使用页面生命周期管理:在跳转后的页面中,通过onPageShowonPageHide等生命周期回调,控制dialog的显示与隐藏,确保dialog在需要时保持顶层显示。

通过这些方法,可以有效避免CustomDialog被覆盖,保持其在跳转页面时处于顶层。

回到顶部