您的位置:首页 > 汽车 > 新车 > 医疗网络营销外包_个人网站的重要性_新闻最新消息10条_正规seo关键词排名网络公司

医疗网络营销外包_个人网站的重要性_新闻最新消息10条_正规seo关键词排名网络公司

2025/5/1 0:16:08 来源:https://blog.csdn.net/u010949451/article/details/147087399  浏览:    关键词:医疗网络营销外包_个人网站的重要性_新闻最新消息10条_正规seo关键词排名网络公司
医疗网络营销外包_个人网站的重要性_新闻最新消息10条_正规seo关键词排名网络公司

【HarmonyOS 5】使用openCustomDialog如何禁止手势关闭的方案

一、前言

在HarmonyOS中使用openCustomDialog自定义弹框时,我们会遇到实现禁止手势关闭弹框的业务场景。
虽然在 HarmonyOS Next 中,自定义 Dialog 默认可能继承系统的侧滑返回手势,并且目前无法屏蔽,官方反馈未来版本可能会开放禁用选项。

在当前版本中,目前无法完全禁止手势关闭,但可以通过一些方法进行控制。例如,监听 onWillDismiss 事件可以在关闭时进行拦截,但需要处理不同的关闭原因。

华为官方文档明确提到了使用openCustomDialog时可以通过配置onWillDismiss回调来拦截关闭事件。在onWillDismiss中,可以检查DismissReason来判断关闭原因,例如用户滑动或点击外部。如果是手势关闭(如侧滑),可以通过返回false来阻止对话框关闭。可以通过监听onWillDismiss事件来禁止手势关闭。

openCustomDialog提供了onWillDismiss回调函数,当用户尝试通过滑动、点击外部、返回键等操作关闭弹窗时,会触发该回调。通过在回调中判断关闭原因并拦截操作,即可实现禁止手势关闭的效果。

二、方案思路

1. 定义自定义弹窗组件
import { PromptAction, DismissReason } from '@ohos.prompt';@Builder
function CustomDialogContent() {return Column() {Text('禁止手势关闭的弹窗').fontSize(24).fontWeight(FontWeight.Bold)Button('确认关闭').onClick(() => {// 主动关闭弹窗promptAction.closeCustomDialog(dialogId);})}.padding(30).backgroundColor(Color.White).borderRadius(16).width('80%')
}
2. 打开弹窗并设置拦截逻辑
let promptAction = UIContext.getPromptAction();
let dialogId: number = 0;promptAction.openCustomDialog({builder: () => CustomDialogContent(),alignment: DialogAlignment.Center,maskColor: 'rgba(0, 0, 0, 0.3)',autoCancel: false, // 禁止点击外部关闭onWillDismiss: (dismissAction) => {// 处理不同关闭原因switch (dismissAction.reason) {case DismissReason.SWIPE: // 侧滑关闭case DismissReason.BACK:   // 返回键关闭return false; // 阻止关闭default:return true; // 允许其他方式关闭}}
}).then(id => dialogId = id);
3. 关闭类型参数说明
参数说明
autoCancel控制是否允许点击外部关闭弹窗,设置为false可禁用该功能。
onWillDismiss关闭事件回调函数,返回false可阻止关闭,返回true则允许关闭。
DismissReason关闭原因枚举,包含SWIPE(侧滑)、BACK(返回键)等类型。

三、源码DEMO示例

import { PromptAction, DismissReason } from '@ohos.prompt';@Entry
@Component
struct App {private promptAction: PromptAction = UIContext.getPromptAction();private dialogId: number = 0;build() {Column() {Button('打开禁止手势关闭的弹窗').onClick(() => this.showDialog())}}showDialog() {this.promptAction.openCustomDialog({builder: () => this.CustomDialogContent(),alignment: DialogAlignment.Center,maskColor: 'rgba(0, 0, 0, 0.3)',autoCancel: false,onWillDismiss: (dismissAction) => {console.log(`关闭原因:${dismissAction.reason}`);return dismissAction.reason === DismissReason.BUTTON; // 仅允许按钮关闭}}).then(id => this.dialogId = id);}@BuilderCustomDialogContent() {return Column() {Text('禁止手势关闭').fontSize(24).fontWeight(FontWeight.Bold)Button('确认关闭').onClick(() => this.promptAction.closeCustomDialog(this.dialogId))}.padding(30).backgroundColor(Color.White).borderRadius(16).width('80%')}
}

注意
综上所述,可在HarmonyOS中实现openCustomDialog的手势关闭拦截。对于需要完全禁止系统级手势的场景,建议结合页面级导航拦截逻辑进行处理。
系统限制

  • 在HarmonyOS Next系统中,部分系统级手势(如从屏幕边缘向内滑动返回)可能无法完全拦截。
  • 建议通过onWillDismiss回调配合页面级onBackPress拦截实现更全面的控制。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com