
【HarmonyOS 5】AttributeModifier和AttributeUpdater详解 原创 精华
【HarmonyOS 5】AttributeModifier和AttributeUpdater区别详解
一、AttributeModifier和AttributeUpdater的定义和作用
1. AttributeModifier是ArkUI组件的动态属性,提供属性设置功能。开发者可使用attributeModifier方法,通过自定义实现AttributeModifier<T>接口,来动态设置组件属性。
方法 | 作用 | API 支持 | 系统能力 |
---|---|---|---|
applyNormalAttribute |
设置组件普通状态时的样式 | 从 API version 12 开始在元服务中支持 | SystemCapability.ArkUI.ArkUI.Full |
applyPressedAttribute |
设置组件按压状态的样式 | 从 API version 12 开始在元服务中支持 | SystemCapability.ArkUI.ArkUI.Full |
applyFocusedAttribute |
设置组件获焦状态的样式 | 从 API version 12 开始在元服务中支持 | SystemCapability.ArkUI.ArkUI.Full |
applyDisabledAttribute |
设置组件禁用状态的样式 | 从 API version 12 开始在元服务中支持 | SystemCapability.ArkUI.ArkUI.Full |
applySelectedAttribute |
设置组件选中状态的样式 | 从 API version 12 开始在元服务中支持 | SystemCapability.ArkUI.ArkUI.Full |
该属性可以提供实现以下三种场景的效果实现:
(1)封装共享UI属性样式
(2)动态更新样式
(3)满足多态度样式的修改(聚焦,按下,默认,选择,禁用)
详情参见官方API文档AttributeModifier动态属性设置-通用属性-组件通用信息-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者
2. AttributeUpdater是ArkUI框架提供的属性更新器。用于更新属性的给组件触发 UI 更新。需从@kit.ArkUI导入模块,开发者自定义类继承AttributeUpdater。
方法 | 作用 | 参数 | 返回值 | API 支持 | 系统能力 | |
---|---|---|---|---|---|---|
applyNormalAttribute |
定义正常态更新属性函数 | instance (组件属性类,必填) |
无 | 从 API version 12 开始在元服务中支持 | SystemCapability.ArkUI.ArkUI.Full |
|
initializeModifier |
AttributeUpdater 首次设置给组件时提供样式 | instance (组件属性类,必填) |
无 | 从 API version 12 开始在元服务中支持 | SystemCapability.ArkUI.ArkUI.Full |
|
attribute |
获取组件对应的属性类实例,实现属性直通更新 | 无 | `T | undefined(存在则返回实例,否则返回 undefined`) |
从 API version 12 开始在元服务中支持 | SystemCapability.ArkUI.ArkUI.Full |
updateConstructorParams |
更改组件的构造入参 | 无 | C (组件构造函数类型) |
从 API version 12 开始在元服务中支持 | SystemCapability.ArkUI.ArkUI.Full |
|
onComponentChanged |
绑定相同自定义 Modifier 对象,组件切换时通知应用 | component (组件属性类,必填) |
无 | 从 API version 12 开始在元服务中支持 | SystemCapability.ArkUI.ArkUI.Full |
详情参见官方API文档AttributeUpdater-arkui-UI界面-ArkTS API-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者
二、AttributeModifier和AttributeUpdater的共性和区别
1. 共性
(1) 都可对组件属性进行设置
(2) AttributeUpdater继承于AttributeModifier,实际上update是个特殊的modifier。
2. 区别
(1)AttributeModifie主要用于上述描述的三种场景,封装共享UI属性样式,实现多态UI表现,动态修改小批量的UI属性。
(2)AttributeUpdater侧重于将属性直接设置给组件,无需标记为状态变量即可直接触发 UI 更新。它更强调属性的直通更新以及对组件构造入参的更改等功能。实际上Update主要处理大批量的属性修改,主要就是为了解决AttributeModifie处理大量属性修改时性能损耗的问题。所以使用属性更新器,可直接绕过ArkUI的@State机制进行属性的更新。
(3) AttributeModifier:自定义 Modifier 不支持感知 @State 装饰的状态数据变化。
AttributeUpdater:可直接更新属性触发 UI 变化,在一定程度上可以看作是绕过了常规的状态管理机制来实现属性更新,对属性更新的控制更为直接。
三、源码示例
注意:
AttributeModifier:属性支持范围不支持入参为 CustomBuilder 或 Lamda 表达式的属性,且不支持手势,事件仅支持部分特定事件。
AttributeUpdater:updateConstructorParams 当前只支持 Button、Image、Text 和 Span 组件,且不支持深浅色切换等状态管理相关的操作。
