HarmonyOS 鸿蒙Next CustomDialog自定义弹窗,如何禁用返回键

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next CustomDialog自定义弹窗,如何禁用返回键

应用场景是: 在打开APP后,弹出来隐私协议的弹窗,其中有[同意]和[不同意]两个按钮, 在触发[返回键]时,不允许这个弹窗消失,只可以通过调用  this.controller.close() 来关闭弹窗,有什么办法实现吗,或者用其他弹窗

14 回复

关于HarmonyOS 鸿蒙Next CustomDialog自定义弹窗 如何禁用返回键可以参考下面代码:

@Entry
@Component
struct Test {
  // 确定删除历史记录的弹窗
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomHistoryDialog({
      title: '确认全部删除?',
      cancel: this.onCancel,
      confirm: this.onConfirm,
    }),
    alignment: DialogAlignment.Default, // 可设置dialog的对齐方式,设定显示在底部或中间等,默认为底部显示
    autoCancel: false,
    onWillDismiss: (dismissDialogAction: DismissDialogAction) => {
      if (dismissDialogAction.reason != DismissReason.PRESS_BACK) {
        this.dialogController?.close();
      }
    },
    offset: { dx: 0, dy: -25 }
  })

  onCancel(title: string) {
    promptAction.showToast({ message: `取消${title}` })
  }

  onConfirm() {
    promptAction.showToast({ message: '确定' })
  }

  build() {
    Button('我的按钮')
      .fontColor('#FF5500')
      .fontSize(20)
      .onClick(() => {
        this.dialogController.open()
      })
  }
}

@CustomDialog
struct CustomHistoryDialog {
  controller: CustomDialogController
  title: string = ''
  confirm: () => void = () => {
  }
  cancel: (title: string) => void = (title: string) => {
  }

  build() {
    Column() {
      Text(this.title)
      Row() {
        Button('取消').onClick(() => {
          this.cancel(this.title)
          this.controller.close()
        })

        Button('确定').onClick(() => {
          this.confirm()
          this.controller.close()
        })
      }
    }
  }
}

请问如何让点击事件触发手机上的返回按钮,实现关闭软键盘

点击返回键,让弹窗再次打开,但是貌似无效!不知为何

cke_131.png

这种是无法这样实现的,这个组件无法拦截。 有一个办法就是你自己写一个Page,类似于弹出框,然后通过 onBackPress(){ return true } 页面拦截。这样按返回键是无效的。只有通过了,你返回false,不拦截。

隐私弹窗提取出来,整个页面吧,同意了才进入下一个页面,或者登录的时候勾选那种

也是一种办法👍

这种怎么处理,我就是遇到这个问题,一按返回键,很尴尬

可以在new CustomDialogController 时添加cancel回调,点击返回键会触发,然后再把弹窗显示出来,效果上会闪一下,看你能否接受闪动。 cancel:()=>{ this.dialogController.open() }

有道理!只要点取消,我就继续弹出来弹窗! 谢谢

可以添加onWillDismiss回调,这样就可以拦截到返回事件 onWillDismiss: (action: DismissDialogAction) => { if (action.reason != DismissReason.PRESS_BACK) { this.loadingDialogController?.close(); } }

目前[@CustomDialog](/user/CustomDialog) API9与API10都无法返回键拦截。

对啦!一说API10,请问API11支持把@Builder 用export导出嘛,昨天看了一个API11的公开课,他竟然在全局的@Builder 后面加了一个export

API11我没有权限看啊,看不了资料。API9里面 @Builder只能在局部使用。

在HarmonyOS中,如果你正在使用Next CustomDialog(假设这是指基于鸿蒙系统自定义的Dialog实现,因为HarmonyOS本身没有直接名为Next CustomDialog的组件,但概念上类似Android中的自定义Dialog),并希望禁用返回键的响应,你可以通过以下几个步骤来实现:

  1. 拦截返回键事件:在Dialog或包含Dialog的Activity/Page中,通过覆盖onBackPressed()方法或监听返回键的按键事件(如果使用的是Page,则可能是通过onKeyEvent或类似方法),来阻止返回键的默认行为。

  2. 设置Dialog的取消监听:确保你的Dialog没有设置通过返回键来取消的监听器。如果你使用的是Dialog的某个方法设置了这样的行为(例如,某些框架下的setCancelable(true)),需要将其改为setCancelable(false)来阻止通过返回键关闭Dialog。

  3. 自定义行为:如果你希望用户在按下返回键时执行某些特定的操作(而不是直接关闭Dialog),可以在拦截到返回键事件后,添加自定义的逻辑。

请注意,具体的实现可能会根据你的项目结构和使用的框架有所不同。如果上述方法在你的项目中不适用,可能需要检查你的Dialog实现或框架文档以找到更具体的解决方案。

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

回到顶部