HarmonyOS 鸿蒙Next使用自定义dialog时遇到的问题
HarmonyOS 鸿蒙Next使用自定义dialog时遇到的问题
写了个dialog弹窗自定义组件,用的是这个:promptAction.openCustomDialog,最后通过
export let DialogUtil = new DialogUtils()导出,
使用过程中遇到几个问题:
1、如果一个页面出现多个弹窗,比如隐私协议,权限申请等等,上面这个弹窗就无法弹出,需要延时才行,断点时弹窗调用是执行了的,也返回了dialogId
2、当弹窗弹出成功时,有返回dialogId,在使用dialogId关闭窗口时, dialogId变成 0,目前是使用AppStorage临时保存,如果dialogId为0时就从里面取值。
以下是大概的代码:
let dialogId: number|undefined = 0
@Component
struct DialogUtils {
show(config: Config) {
promptAction.openCustomDialog({
builder: () => {
this.dialogBuilder(config)
},
backgroundBlurStyle: BlurStyle.NONE,
alignment: DialogAlignment.Center,
maskColor: '#90000000',
cornerRadius: 10,
autoCancel: !config.isForce,
onWillDismiss: (action: DismissDialogAction) => {
}
}).then((dialogId: number) => {
dialogId = dialogId
}).catch((e:BusinessError)=>{
})
}
@Builder
dialogBuilder(config: UpdateConfig) {
Column() {
Stack({ alignContent: Alignment.TopStart }) {
Image($r('app.media.bg'))
.objectFit(ImageFit.Contain)
Text(config.content)
.margin({
left: 24,
top: 140,
right: 24,
bottom: 70
})
.constraintSize({ maxHeight: 120 })
.fontSize(14)
.fontColor(Color.White)
}
.constraintSize({ minHeight: 320 })
.width(StyleConstants.FULL_PERCENT)
.aspectRatio(0.92)
Image($r('app.media.btn'))
.objectFit(ImageFit.Contain)
.margin({ top: -20 })
.width(190)
.height(40)
.onClick(() => {
promptAction.closeCustomDialog(dialogId)
if (config.messageCallBack) {
config.messageCallBack()
}
})
Image($r('app.media.close'))
.objectFit(ImageFit.Contain)
.width(40)
.height(40)
.margin({ top: 40 })
.visibility(config.isForce ? Visibility.None : Visibility.Visible)
.onClick(() => {
promptAction.closeCustomDialog(dialogId)
if (config.closeCallBack) {
config.closeCallBack()
}
})
}
.width('90%')
}
build() {
}
}
export let DialogUtil = new DialogUtils()
更多关于HarmonyOS 鸿蒙Next使用自定义dialog时遇到的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
随时随处弹,亲测有效
更多关于HarmonyOS 鸿蒙Next使用自定义dialog时遇到的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
如果页面有多个权限申请窗口,也能弹出来?
有系统弹窗存在的情况,没试过,不过这个弹窗可以弹多层,比如弹一个隐私协议,上面再弹一个提示,
我试了下,只要有权限弹窗,这个也弹不了,目前的使用了Stack层级去实现了,
Config和UpdateConfig这两个麻烦提供下,这边再基于demo分析下问题
目前使用Stack实现了,没用dialog,如果遇到有系统弹窗,还是弹不了。
建议使用Navigation的Dialog模式来写弹窗,可操作性高
在HarmonyOS鸿蒙Next系统中使用自定义dialog时,可能遇到的问题通常与dialog的布局、显示逻辑以及生命周期管理相关。以下是一些可能的原因及解决方法:
-
布局问题:
- 确保自定义dialog的布局文件(XML)正确无误,且所有控件的属性设置合理。
- 检查布局文件中是否有不兼容的组件或属性,这些可能在鸿蒙系统中不被支持。
-
显示逻辑:
- 在创建和显示dialog时,确保使用鸿蒙提供的Dialog组件及相关API。
- 检查dialog的显示时机,确保在UI线程中正确调用显示方法。
-
生命周期管理:
- 自定义dialog在显示和隐藏时,可能会触发一些生命周期回调,确保这些回调中的代码逻辑正确。
- 如果dialog中包含异步操作(如网络请求),需确保这些操作在dialog销毁时得到妥善处理,避免内存泄漏或程序崩溃。
-
事件处理:
- 确保自定义dialog中的事件(如按钮点击)得到正确处理,且事件处理逻辑与鸿蒙系统的交互规范相符。
如果以上方法仍无法解决问题,可能是特定于你的应用或鸿蒙系统版本的bug。此时,建议直接联系官网客服以获取更专业的帮助。官网地址是:https://www.itying.com/category-93-b0.html