HarmonyOS 鸿蒙Next 弹框不允许自动取消

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

HarmonyOS 鸿蒙Next 弹框不允许自动取消

CustomDialog如何限制无法自动关闭, 必须用户点击按钮关闭, autoCancel 只能限制用户点击背景不自动关闭, 但是用户物理返回、系统侧滑返回还是会关闭弹框

HUAWEI Mate 60 Pro ALN-AL80 next0.0.65(SP71C00E65R4P9log)
DevEco Studio版本:(5.0.3.700)

代码示例

```javascript
// xxx.ets
[@CustomDialog](/user/CustomDialog)
struct CustomDialogExample {
controller?: CustomDialogController
cancel: () => void = () => {
}
confirm: () => void = () => {
}
build() {
Column() {
Text('可展示在主窗口外的弹窗')
.fontSize(30)
.height(100)
Button('点我关闭弹窗')
.onClick(() => {
if (this.controller != undefined) {
this.controller.close()
}
})
.margin(20)
}
}
}

[@Entry](/user/Entry)
[@Component](/user/Component)
struct CustomDialogUser {
dialogController: CustomDialogController | null = new CustomDialogController({
builder: CustomDialogExample({
cancel: () => { this.onCancel() },
confirm: () => { this.onAccept() }
}),
cancel: this.existApp,
autoCancel: false,
alignment: DialogAlignment.Center,
offset: { dx: 0, dy: -20 },
gridCount: 4,
showInSubWindow: false,
isModal: true,
customStyle: false,
cornerRadius: 10,
})

// 在自定义组件即将析构销毁时将dialogControlle置空
aboutToDisappear() {
this.dialogController = null // 将dialogController置空
}

onCancel() {
console.info('Callback when the first button is clicked')
}

onAccept() {
console.info('Callback when the second button is clicked')
}

existApp() {
console.info('Click the callback in the blank area')
}

build() {
Column() {
Button('click me')
.onClick(() => {
if (this.dialogController != null) {
this.dialogController.open()
}
}).backgroundColor(0x317aff)
}.width('100%').margin({ top: 5 })
}
}

更多关于HarmonyOS 鸿蒙Next 弹框不允许自动取消的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

这个可以加上onWillDismiss方法,判断下退出方式就行了

builder: CustomDialogExample({
...
onWillDismiss: (dismissDialogAction: DismissDialogAction) => {
      console.info("reason=" + JSON.stringify(dismissDialogAction.reason))
      console.log("dialog onWillDismiss")
      if (dismissDialogAction.reason == DismissReason.CLOSE_BUTTON) {
        dismissDialogAction.dismiss()
      }
    }
})

api文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-promptaction-V5#basedialogoptions11

更多关于HarmonyOS 鸿蒙Next 弹框不允许自动取消的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对帖子标题“HarmonyOS 鸿蒙Next 弹框不允许自动取消”的问题,以下是专业且简洁的回答:

在HarmonyOS鸿蒙Next系统中,若要实现弹框不允许自动取消的功能,通常需要在弹框的配置或逻辑处理中明确指定不允许自动关闭。这通常涉及到弹框组件的属性设置或事件处理逻辑。

具体实现方式可能因弹框组件的不同而有所差异。例如,在某些自定义弹框组件中,可能需要设置一个属性来控制弹框是否可以通过用户操作(如点击背景区域)自动关闭。将该属性设置为不允许自动关闭的状态,即可实现需求。

此外,还需要确保在弹框的逻辑处理中,没有实现任何可能导致弹框自动关闭的代码逻辑。例如,避免在弹框显示后设置定时器自动关闭弹框,或者在特定事件触发时自动关闭弹框。

如果已经在弹框的配置和逻辑处理中正确设置了不允许自动取消的属性,但问题依旧存在,可能是由于系统更新或组件库变更导致的兼容性问题。此时,建议检查最新的HarmonyOS开发文档或组件库更新日志,以获取最新的实现方式和兼容性信息。

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

回到顶部