HarmonyOS 鸿蒙Next 使用不依赖组件的Dialog如何禁用点击周围空白隐藏弹窗
HarmonyOS 鸿蒙Next 使用不依赖组件的Dialog如何禁用点击周围空白隐藏弹窗 根据开发文档[1]进行不依赖组件的弹窗使用,但是现在发现点击弹窗外可以关闭弹窗。请问如果将此功能禁用
可以使用 onWillDismiss 方法。当用户执行点击遮障层关闭、左滑/右滑、三键 back、键盘 ESC 关闭交互操作时,如果注册该回调函数,则不会立刻关闭弹窗。在回调函数中可以通过 reason 得到阻拦关闭弹窗的操作类型,从而根据原因选择是否能关闭弹窗。
参考代码:
import { BusinessError } from '@ohos.base';
import { ComponentContent } from "@ohos.arkui.node";
import { PromptAction } from '@kit.ArkUI';
// 弹框属性
export class Params {
text: string = "";
backgroundColor: string = "";
opacity: number = 1;
width: number = 0;
height: number = 0;
btnControl: string = '';
}
// 自定义弹框
@Builder
function buildText(params: Params) {
Column() {
Text(params.text || '默认内容')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.margin({ bottom: 36 })
}
.width(params.width || 200)
.height(params.height || 400)
.backgroundColor(params.backgroundColor || '#FFF0F0F0')
.opacity(params.opacity)
}
// 弹框控制
export function setDialog(uiContext: UIContext, promptAction: PromptAction, params: Params) {
let contentNode = new ComponentContent(uiContext, wrapBuilder(buildText), params);
try {
promptAction.openCustomDialog(contentNode, {
onWillDismiss: (dismissDialogAction: DismissDialogAction) => {
if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {
console.log('点击遮罩层事件:')
if (params.btnControl !== '关闭控制') {
dismissDialogAction.dismiss()
}
}
}
});
} catch (error) {
let message = (error as BusinessError).message;
let code = (error as BusinessError).code;
console.error(`OpenCustomDialog args error code is ${code}, message is ${message}`);
}
}
@Entry
@Component
struct Index {
@State message: string = "hello"
private uiContext = this.getUIContext()
private promptAction = this.getUIContext().getPromptAction()
build() {
Row() {
Column() {
Button("控制弹框关闭")
.margin(10)
.width('80%')
.onClick(() => {
let params: Params = new Params()
params.btnControl = '关闭控制'
setDialog(this.uiContext, this.promptAction, params)
})
}
.width('100%')
.height('100%')
}
.height('100%')
}
}
更多关于HarmonyOS 鸿蒙Next 使用不依赖组件的Dialog如何禁用点击周围空白隐藏弹窗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next系统中,如果你想实现一个不依赖组件的Dialog,并且禁用点击周围空白区域隐藏弹窗的功能,可以通过以下方式实现:
-
自定义Dialog布局:首先,你需要自定义一个Dialog的布局文件,确保它包含你想要展示的内容。
-
设置Dialog属性:在创建Dialog实例时,可以通过设置相关属性来禁用点击外部区域隐藏的功能。通常,Dialog类会有一个方法或属性来控制这一行为,例如
setCanceledOnTouchOutside(false)
(注意:此方法名仅为示例,实际鸿蒙系统中可能有所不同,需查阅具体API文档)。 -
展示Dialog:使用自定义的布局和设置好的属性来展示Dialog。确保在展示Dialog的代码中没有启用点击外部隐藏的逻辑。
-
处理事件:如果需要,你可以在Dialog内部处理自己的点击事件,确保点击事件不会传播到Dialog外部导致隐藏。
由于鸿蒙系统的API可能与Android有所不同,具体实现细节需参考鸿蒙系统的官方文档或开发者指南。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html