弹窗是一种模态窗口,通常用来展示用户当前需要的或用户必须关注的信息或操作。在UI开发中,弹框是重要且不可忽视的组件。
HarmonyOS内置了多种系统弹框,分别有AlertDialog 、TextPickerDialog 、DatePickerDialog以及TimePickerDialog等。
本文将详细介绍系统弹框的封装和使用,并着重展现自定义弹框的实现。
系统弹框
AlertDialog
AlertDialog是警告弹窗,一般由App主动弹出,用于警告和确认用户的操作行为,需用户手动点击操作按钮来取消或进行下一步。
AlertDialog的实现
如下图中的“删除联系人”弹框,一个AlertDialog包含标题、内容和操作区三个部分组成,操作区包含两个按钮,我们可以在按钮的点击事件里添加对应响应逻辑。
以上弹框的实现代码如下:
AlertDialog的封装
我们可以对AlertDialog进行封装,作为工具类调用。
这里创建了CommonUtils
的工具类,把标题、提示信息作为创建自定义弹框的参数,按钮的点击事件可在回调里分别实现。
有了这种封装,我们就能很容易地在App里调用一个风格统一的AlertDialog弹框了。
TextPickerDialog
这是一种文本滑动选择弹窗,一般用于从多个选项中单选内容,再将用户所选的内容返回给调用方。
如下图所示,这里实现了一个选择“足球主队”的弹窗,用户上下滑动滑块再点击“确认”就可以完成选择。
TextPickerDialog的实现
TextPickerDialog的封装
我们可以将选项作为参数进行TextPickerDialog的封装,并提供用户确认选项的回调。
这里的range
的类型为:string[] | string[][] | Resource | TextPickerRangeContent[] | TextCascadePickerRangeContent[]
,提供了多种数据源类型,我们一般使用Resource
方便多语言适配。
对工具类中的TextPickerDialog的调用如下:
这里的app.strarray.club\_array
指向resources
中的配置文件stringarray.json5,其内容如下:
DatePickerDialog
DatePickerDialog是日期选择器弹框,用于选择特定格式的日期,并返回给调用方。
DatePickerDialog的实现
以“出生日期”选择器弹框为例,我们通过如下代码可以实现:
DatePickerDialog的封装
日期选择器包含起始日期、截止日期和默认选中日期三个参数,我们只需对用户确认选择后的回调里响应即可。
基于以上封装,datePickerDialog的调用可以简单地实现如下:
自定义弹框
除了系统弹框,还可以对弹框进行自定义。自定义弹框更加灵活,适用于更多的业务场景。
这里,我们实现一个包含多选器的自定义弹框,其实现效果如下图所示。
不难看出,这个弹框由标题、选择列表和按钮操作区构成。
自定义弹框需要使用装饰器@CustomDialog
,
我们创建一个名为CustomDialogWidget
的struct,并添加三个属性。
\* items是数据源;
\* selectedContent是选中结果拼接而成的字符串;
\* controller是自定义弹框的控制器,其类型为CustomDialogController
。
在组件的aboutToAppear()
中实现数据源的获取,使用到resmgr.ResourceManager
的getStringArrayValue
方法。
然后在Build()中实现其界面的搭建:
在确定按钮的回调中,我们调用setSelectedItems()
,其实现如下:
这里我们还用到了组件的属性扩展方法封装(用于提取重复的属性代码进行复用):
自定义弹框的调用
自定义弹框的调用基于CustomDialogController
,将CustomDialogWidget
作为它的参数builder
即可实现控制器调出我们预期的自定义弹框。
以上,我们总结了HarmonyOS系统弹框和自定义弹框的实现、封装及调用。
我是郑知鱼🐳,欢迎大家讨论与指教。
如果你觉得有所收获,也请点赞👍🏻收藏⭐️关注🔍我吧~~
具体代码见: customDialog