
【HarmonyOS Next】鸿蒙中自定义弹框OpenCustomDialog、CustomDialog与DialogHub的区别详解 原创
【HarmonyOS Next】鸿蒙中自定义弹框OpenCustomDialog、CustomDialog与DialogHub的区别详解
一、三者的区别与关系
1. 官方迭代过程为:
CustomDialog = 》 OpenCustomDialog = 》 DialogHub
迭代过程表明,弹框的调用越来越便捷,与UI解耦,最终达到在纯逻辑中使用自定义弹出,弹框内容更新和生命周期可控,写法简洁。
2.CustomDialog的用法:
首先需要创建@CustomDialog装饰的自定义弹框布局,CustomDialogController来实现弹窗弹出和关闭。
综上所述,CustomDialog 因为CustomDialogController强耦合于UI,需要在UI界面或者自定义View中使用CustomDialogController控制弹框显示隐藏。无法在纯逻辑类中处理弹框时机的显示。(这种情况下只能想办法发送通知给UI,UI再处理回调显示,处理起来麻烦。)致命的问题是,弹框内的UI无法动态刷新。需要重新创建渲染。
3.OpenCustomDialog 的用法:
对标CustomDialog 的CustomDialogController。官方通过将弹框对象实例,放到上下文中,实现在纯逻辑类中也可以调用弹框的显示和隐藏。
将@CustomDialog弹框布局内容,放到ComponentContent节点对象中,实现弹框UI的解耦。
DialogHub的用法:
参考:【HarmonyOS Next】鸿蒙应用实现弹框DialogHub详解
二、自定义View与UI解耦的解决方案:
目前共有三种方式,使用浮层(DialogHub底层原理),使用OpenCustomDialog,使用subWindow。
1.浮层
DialogHub底层原理。在页面Page与弹框层之间,ArkUI框架有一个浮层。该层通过节点管控(增加,删除)的方式,可以插入自定义UI。
ComponentContent可以理解为一个节点内容对象,在其中进行自定义UI的界面编写,打包为一个ComponentContent节点,添加到浮层上,ArkUI框架就会加载显示。
2.OpenCustomDialog
参考:【HarmonyOS Next】鸿蒙应用弹框和提示气泡详解(一)
3.subWindow
因为三方应用不能使用FloatWindow,没有悬浮窗。只能通过子窗口SubWindow实现独立的自定义View层级。
三、多弹框源码示例:
