HarmonyOS 鸿蒙Next 自定义命令式弹框

HarmonyOS 鸿蒙Next 自定义命令式弹框

主要通过ComponentContent类和uiContext.getPromptAction().openCustomDialog实现。 具体代码如下:

    const uiContext = await this.getUIContext()
    const closeOnBack = options.closeOnBack ?? true
    const onWillDismiss = options.onWillDismiss;
    const onDidDisappear = options.onDidDisappear;
    const id = options.id ? options.id : new BaseSingleDialog().id;
    const componentContent = new ComponentContent(uiContext,
      wrapperBuilder, attachProperty(options, {
        onWillDismiss: (dismiss: DismissDialogAction) => {
          if (dismiss.reason === DismissReason.PRESS_BACK && !closeOnBack) {
            return;
          }
          onWillDismiss ? onWillDismiss(dismiss) : dismiss.dismiss()
        },
        onDidDisappear: () => {
          // 及时移除销毁实例
          const removeInfo = MBaseDialogApi.dialogs.find(_ => _.id === id);
          if (removeInfo) {
            MBaseDialogApi.removeDialog(removeInfo.id);
            removeInfo.componentContent && removeInfo.componentContent.dispose()
          }
          onDidDisappear?.()
        }
      }))
    uiContext.getPromptAction().openCustomDialog(componentContent, options)

自定义内容依靠的WrappedBuilder类,比如:

 const componentContent = new ComponentContent(uiContext,wrapBuilder(CustomDialogBuilder))


@Builder
export function CustomDialogBuilder(options: CustomOptions) {
  CustomDialogView({ options, builder: options.builder })
}

@Component
struct CustomDialogView {
  @Prop options: CustomOptions;
  @BuilderParam builder?: () => void;

  build() {
    Column() {
      this.builder?.()
    }
    .height(this.options.height)
    .width(this.options.width)
  }
}

具体代码示例可参考仓库源代码


更多关于HarmonyOS 鸿蒙Next 自定义命令式弹框的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

更多关于HarmonyOS 鸿蒙Next 自定义命令式弹框的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next自定义命令式弹框,通常可以通过CustomDialog或创建SubWindow来实现。但这种方式可能会遇到一些问题,如弹窗无法保持在目标页面,或无法控制弹窗展示优先级等。

为解决这些问题,可以考虑使用Stack层叠布局的形式改造页面整体结构,在页面左上角预留一个宽高均为0的组件作为弹窗展示容器,统一管理所有弹窗。通过状态变量控制弹窗的显隐,并使用Column或Stack组件控制弹窗的展示顺序和层级。

此外,自定义弹窗时还需注意以下几点:

  • 确保弹窗的层级设置正确,避免被其他UI组件覆盖。
  • 检查弹窗的布局文件,确保没有不必要的边距或对齐方式导致内容被遮挡。
  • 确认应用具备在屏幕上显示弹窗的必要权限。
  • 检查鸿蒙系统版本与弹窗组件的兼容性。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部