
ETS装饰器学习之Extend、CustomDialog 原创
在学习声明式UI框架ArkUI的过程中,会遇到装饰器的概念,不管是简单的示例页面还是复杂的大程序,都离不开装饰器的使用,为了帮助自己对装饰器有一个基本的了解,并能够熟练的使用,所以专门针对ets装饰器系统的学习了一下,并整理成简单的笔记,以便健忘的我随时回来复习一下。
本文主要介绍Extend和CustomDialog,Extend用来专门针对内置组件定义新方法,CustomDialog则用来自定义弹窗,系统弹窗不满足用户需求的情况下,就可以使用这个。
@Extend
@Extend装饰器将新的属性函数添加到内置组件上,如Text、Column、Button等。通过@Extend装饰器可以快速的扩展原生组件。@Extend装饰器不能用在自定义组件struct定义框内。
通过对内置组件进行二次封装,把需要的属性设置封装在一个方法内,可以减少对内置组件的重复设置。
示例代码:
效果预览:
上面示例,分别在Text、Column、Button组件自定义了新方法,通过这种自定义,让开发可以更加简便高效。
Text自定义的titleFormat属性函数,快速设置文本为标题格式,contentFormat快速设置文本为正文格式,
Column自定义的topCenter属性函数,设置顶部对齐,居中显示。
Button自定义的positiveButton和negativeButton属性函数,分别定义了主要按钮和次要按钮。
@CustomDialog
@CustomDialog装饰器用于装饰自定义弹窗,使得弹窗可以动态设置样式。
我们采用临摹的方式,做一个类似华为手机上的删除确认框,原对话框如下
首先使用系统标准弹窗AlertDialog做一个删除窗口,
示例代码:
效果预览:
弹出窗口很简单,但也有很多局限,不能加复选框,字体也不能调节,所以很多时候不能满足开发者的要求,我们使用CustomDialog重新做一个删除对话框。
示例代码:
效果预览:
总结一下,添加CustomDialog一共分两步:
- 添加一个@CustomDialog修饰的struct类,内部定义一个CustomDialogController类型的controller变量,不用初始化,在build函数中,按照需要构建弹出窗口的界面。
- 在调用弹出窗口的Component内也定义一个CustomDialogController类型的内部变量,需要初始化,并指定参数中builder变量为第一步定义的struct类。
