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

GeorgeGcs
• 阅读 4

##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、前言 在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); }

@Builder CustomDialogContent() { 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拦截实现更全面的控制。

点赞
收藏
评论区
推荐文章
GeorgeGcs GeorgeGcs
18小时前
【 HarmonyOS 5 入门系列 】鸿蒙HarmonyOS示例项目讲解
【HarmonyOS5入门系列】鸿蒙HarmonyOS示例项目讲解\鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言:移动开发声明式UI框架的技术变革在移动操作系统的发展历程中,UI开发模式经历了从命令式到声明式的重大变革。根据
GeorgeGcs GeorgeGcs
18小时前
【HarmonyOS 5】AttributeModifier和AttributeUpdater区别详解
【HarmonyOS5】AttributeModifier和AttributeUpdater区别详解\鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、AttributeModifier和AttributeUpdater的定义和作用1
GeorgeGcs GeorgeGcs
11小时前
从“备胎”到领航者,鸿蒙操作系统的传奇进化
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财【HarmonyOS5】2019年,在全球科技产业的风云变幻中,华为正式推出了鸿蒙操作系统(HarmonyOS),这一消息如同一颗重磅炸弹,瞬间吸引了全世界的目光。彼时,外界对鸿蒙的诞生背
GeorgeGcs GeorgeGcs
9小时前
【HarmonyOS 5】鸿蒙应用实现发票扫描、文档扫描输出PDF图片或者表格的功能
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言图(11)HarmonyOS系统提供的核心场景化视觉服务,旨在帮助开发者快速实现移动端文档数字化功能。其核心能力包括:扫描合同、票据、会议记录并保存为PDF分享。拍摄课堂PPT、书
GeorgeGcs GeorgeGcs
9小时前
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言在HarmonyOS5的应用开发模型中,featureAbility是旧版FA模型(FeatureAbility)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文
GeorgeGcs GeorgeGcs
9小时前
【HarmonyOS 5】鸿蒙中的UIAbility详解(二)
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言今天我们继续深入讲解UIAbility,根据下图可知,在鸿蒙中UIAbility继承于Ability,开发者无法直接继承Ability。只能使用其两个子类:UIAbility和Ex
GeorgeGcs GeorgeGcs
9小时前
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言在HarmonyOS5的应用开发模型中,featureAbility是旧版FA模型(FeatureAbility)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文
GeorgeGcs GeorgeGcs
9小时前
鸿蒙 6.0 引爆 AI 智能体革命:从交互重构到全场景智能觉醒,未来已至
【HarmonyOS5】鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言今天的华为开发者大会(2025HDC),全程看完,我只想说,震撼对于用户来说,一个未来场景的手机操作系统,正在诞生,从文本交互的操作转向自然语言,未来手机用
GeorgeGcs GeorgeGcs
7小时前
【HarmonyOS 5】鸿蒙Web组件和内嵌网页双向通信DEMO示例
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言在ArkUI开发中,Web组件(Web)允许开发者在应用内嵌入网页,实现混合开发场景。本文将通过完整DEMO,详解如何通过WebviewController实现ArkUI与内嵌网页
GeorgeGcs GeorgeGcs
7小时前
【HarmonyOS】鸿蒙应用蓝牙功能实现 (二)
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财前言蓝牙一般分为传统蓝牙(BR/EDR),低功耗蓝牙(BLE)两种。鸿蒙将蓝牙的功能模块分的非常细。基本上我们会用到access进行蓝牙状态的开启和关闭,以及状态查询。在使用connect
GeorgeGcs
GeorgeGcs
Lv1
男 · 金融头部企业 · 鸿蒙应用架构师
HarmonyOS认证创作先锋,华为HDE专家,鸿蒙讲师,作者。目前任职鸿蒙应用架构师。 历经腾讯,宝马,研究所,金融。 待过私企,外企,央企。 深耕大应用开发领域十年。 AAE,Harmony(OpenHarmony\HarmonyOS),MAE(Android\IOS),FE(H5\Vue\RN)。
文章
56
粉丝
1
获赞
2