1# ArkUI_NativeNodeAPI_1 2<!--Kit: ArkUI--> 3<!--Subsystem: ArkUI--> 4<!--Owner: @piggyguy; @xiang-shouxing; @yangfan229--> 5<!--Designer: @piggyguy; @xiang-shouxing; @yangfan229--> 6<!--Tester: @fredyuan912--> 7<!--Adviser: @HelloCrease--> 8 9## 概述 10 11ArkUI提供的Native侧Node类型接口集合。Node模块相关接口需要在主线程上调用。 12 13**起始版本:** 12 14 15**相关模块:** [ArkUI_NativeModule](capi-arkui-nativemodule.md) 16 17**所在头文件:** [native_node.h](capi-native-node-h.md) 18 19## 汇总 20 21### 成员变量 22 23| 名称 | 描述 | 24| -- | -- | 25| int32_t version | 结构体版本。 | 26 27 28### 成员函数 29 30| 名称 | 描述 | 31| -- | -- | 32| [ArkUI_NodeHandle (\*createNode)(ArkUI_NodeType type)](#createnode) | 基于[ArkUI_NodeType](capi-native-node-h.md#arkui_nodetype)生成对应的组件并返回组件对象指针。 | 33| [void (\*disposeNode)(ArkUI_NodeHandle node)](#disposenode) | 销毁组件指针指向的组件对象。 | 34| [int32_t (\*addChild)(ArkUI_NodeHandle parent, ArkUI_NodeHandle child)](#addchild) | 将组件挂载到某个父节点之下。 | 35| [int32_t (\*removeChild)(ArkUI_NodeHandle parent, ArkUI_NodeHandle child)](#removechild) | 将组件从父节点中移除。 | 36| [int32_t (\*insertChildAfter)(ArkUI_NodeHandle parent, ArkUI_NodeHandle child, ArkUI_NodeHandle sibling)](#insertchildafter) | 将组件挂载到某个父节点之下,挂载位置在<b>sibling</b>节点之后。 | 37| [int32_t (\*insertChildBefore)(ArkUI_NodeHandle parent, ArkUI_NodeHandle child, ArkUI_NodeHandle sibling)](#insertchildbefore) | 将组件挂载到某个父节点之下,挂载位置在<b>sibling</b>节点之前。 | 38| [int32_t (\*insertChildAt)(ArkUI_NodeHandle parent, ArkUI_NodeHandle child, int32_t position)](#insertchildat) | 将组件挂载到某个父节点之下,挂载位置由<b>position</b>指定。 | 39| [int32_t (\*setAttribute)(ArkUI_NodeHandle node, ArkUI_NodeAttributeType attribute, const ArkUI_AttributeItem* item)](#setattribute) | 属性设置函数。 | 40| [const ArkUI_AttributeItem* (\*getAttribute)(ArkUI_NodeHandle node, ArkUI_NodeAttributeType attribute)](#getattribute) | 属性获取函数。该接口返回的指针是ArkUI框架内部的缓冲区指针,不需要开发者主动调用delete释放内存,但是需要在该函数下一次被调用前使用,否则可能会被其他值所覆盖。 | 41| [int32_t (\*resetAttribute)(ArkUI_NodeHandle node, ArkUI_NodeAttributeType attribute)](#resetattribute) | 重置属性函数。 | 42| [int32_t (\*registerNodeEvent)(ArkUI_NodeHandle node, ArkUI_NodeEventType eventType, int32_t targetId, void* userData)](#registernodeevent) | 注册节点事件函数。 | 43| [void (\*unregisterNodeEvent)(ArkUI_NodeHandle node, ArkUI_NodeEventType eventType)](#unregisternodeevent) | 反注册节点事件函数。 | 44| [void (\*registerNodeEventReceiver)(void (\*eventReceiver)(ArkUI_NodeEvent* event))](#registernodeeventreceiver) | 注册事件回调统一入口函数。ArkUI框架会统一收集过程中产生的组件事件并通过注册的eventReceiver函数回调给开发者。<br> 重复调用时会覆盖前一次注册的函数。 避免直接保存ArkUI_NodeEvent对象指针,数据会在回调结束后销毁。<br> 如果需要和组件实例绑定,可以使用addNodeEventReceiver函数接口。<br> | 45| [void (\*unregisterNodeEventReceiver)()](#unregisternodeeventreceiver) | 反注册事件回调统一入口函数。 | 46| [void (\*markDirty)(ArkUI_NodeHandle node, ArkUI_NodeDirtyFlag dirtyFlag)](#markdirty) | 强制标记当前节点需要重新测算,布局或者绘制。系统属性设置更新场景下ArkUI框架会自动标记脏区并重新执行测算,布局或者绘制,不需要开发者主动调用该函数。 | 47| [uint32_t (\*getTotalChildCount)(ArkUI_NodeHandle node)](#gettotalchildcount) | 获取子节点的个数。 | 48| [ArkUI_NodeHandle (\*getChildAt)(ArkUI_NodeHandle node, int32_t position)](#getchildat) | 获取子节点。 | 49| [ArkUI_NodeHandle (\*getFirstChild)(ArkUI_NodeHandle node)](#getfirstchild) | 获取第一个子节点。 | 50| [ArkUI_NodeHandle (\*getLastChild)(ArkUI_NodeHandle node)](#getlastchild) | 获取最后一个子节点。 | 51| [ArkUI_NodeHandle (\*getPreviousSibling)(ArkUI_NodeHandle node)](#getprevioussibling) | 获取上一个兄弟节点。 | 52| [ArkUI_NodeHandle (\*getNextSibling)(ArkUI_NodeHandle node)](#getnextsibling) | 获取下一个兄弟节点。 | 53| [int32_t (\*registerNodeCustomEvent)(ArkUI_NodeHandle node, ArkUI_NodeCustomEventType eventType, int32_t targetId, void* userData)](#registernodecustomevent) | 注册自定义节点事件函数。事件触发时通过registerNodeCustomEventReceiver注册的自定义事件入口函数返回。 | 54| [void (\*unregisterNodeCustomEvent)(ArkUI_NodeHandle node, ArkUI_NodeCustomEventType eventType)](#unregisternodecustomevent) | 反注册自定义节点事件函数。 | 55| [void (\*registerNodeCustomEventReceiver)(void (\*eventReceiver)(ArkUI_NodeCustomEvent* event))](#registernodecustomeventreceiver) | 注册自定义节点事件回调统一入口函数。ArkUI框架会统一收集过程中产生的自定义组件事件并通过注册的registerNodeCustomEventReceiver函数回调给开发者。<br> 重复调用时会覆盖前一次注册的函数。<br> 避免直接保存ArkUI_NodeCustomEvent对象指针,数据会在回调结束后销毁。<br> 如果需要和组件实例绑定,可以使用addNodeCustomEventReceiver函数接口。<br> | 56| [void (\*unregisterNodeCustomEventReceiver)()](#unregisternodecustomeventreceiver) | 反注册自定义节点事件回调统一入口函数。 | 57| [int32_t (\*setMeasuredSize)(ArkUI_NodeHandle node, int32_t width, int32_t height)](#setmeasuredsize) | 在测算回调函数中设置组件的测算完成后的宽和高。 | 58| [int32_t (\*setLayoutPosition)(ArkUI_NodeHandle node, int32_t positionX, int32_t positionY)](#setlayoutposition) | 在布局回调函数中设置组件的位置。 | 59| [ArkUI_IntSize (\*getMeasuredSize)(ArkUI_NodeHandle node)](#getmeasuredsize) | 获取组件测算完成后的宽高尺寸。 | 60| [ArkUI_IntOffset (\*getLayoutPosition)(ArkUI_NodeHandle node)](#getlayoutposition) | 获取组件布局完成后的位置。 | 61| [int32_t (\*measureNode)(ArkUI_NodeHandle node, ArkUI_LayoutConstraint* Constraint)](#measurenode) | 对特定组件进行测算,可以通过getMeasuredSize接口获取测算后的大小。 | 62| [int32_t (\*layoutNode)(ArkUI_NodeHandle node, int32_t positionX, int32_t positionY)](#layoutnode) | 对特定组件进行布局并传递该组件相对父组件的期望位置。 | 63| [int32_t (\*addNodeEventReceiver)(ArkUI_NodeHandle node, void (\*eventReceiver)(ArkUI_NodeEvent* event))](#addnodeeventreceiver) | 在组件上添加组件事件回调函数,用于接受该组件产生的组件事件。不同于registerNodeEventReceiver的全局注册函数,该函数允许在同一个组件上添加多个事件接受器。<br> 该函数添加的监听回调函数触发时机会先与registerNodeEventReceiver注册的全局回调函数。<br> 避免直接保存ArkUI_NodeEvent对象指针,数据会在回调结束后销毁。<br> | 64| [int32_t (\*removeNodeEventReceiver)(ArkUI_NodeHandle node, void (\*eventReceiver)(ArkUI_NodeEvent* event))](#removenodeeventreceiver) | 在组件上删除注册的组件事件回调函数。 | 65| [int32_t (\*addNodeCustomEventReceiver)(ArkUI_NodeHandle node, void (\*eventReceiver)(ArkUI_NodeCustomEvent* event))](#addnodecustomeventreceiver) | 在组件上添加自定义事件回调函数,用于接受该组件产生的自定义事件(如布局事件,绘制事件)。不同于registerNodeCustomEventReceiver的全局注册函数,该函数允许在同一个组件上添加多个事件接受器。<br> 该函数添加的监听回调函数触发时机会先与registerNodeCustomEventReceiver注册的全局回调函数。<br> 避免直接保存ArkUI_NodeCustomEvent对象指针,数据会在回调结束后销毁。<br> | 66| [int32_t (\*removeNodeCustomEventReceiver)(ArkUI_NodeHandle node, void (\*eventReceiver)(ArkUI_NodeCustomEvent* event))](#removenodecustomeventreceiver) | 在组件上删除注册的自定义事件回调函数。 | 67| [int32_t (\*setUserData)(ArkUI_NodeHandle node, void* userData)](#setuserdata) | 在组件上保存自定义数据。 | 68| [void* (\*getUserData)(ArkUI_NodeHandle node)](#getuserdata) | 获取在组件上保存的自定义数据。 | 69| [int32_t (\*setLengthMetricUnit)(ArkUI_NodeHandle node, ArkUI_LengthMetricUnit unit)](#setlengthmetricunit) | 指定组件的单位。 | 70| [ArkUI_NodeHandle (\*getParent)(ArkUI_NodeHandle node)](#getparent) | 获取父节点。 | 71| [int32_t (\*removeAllChildren)(ArkUI_NodeHandle parent)](#removeallchildren) | 从父组件上卸载所有子节点。 | 72 73## 成员函数说明 74 75### createNode() 76 77``` 78ArkUI_NodeHandle (*createNode)(ArkUI_NodeType type) 79``` 80 81**描述:** 82 83 84基于[ArkUI_NodeType](capi-native-node-h.md#arkui_nodetype)生成对应的组件并返回组件对象指针。 85 86**参数:** 87 88| 参数项 | 描述 | 89|-------------------------------------------------------------| -- | 90| [ArkUI_NodeType](capi-native-node-h.md#arkui_nodetype) type | 创建指定类型的UI组件节点。 | 91 92**返回:** 93 94| 类型 | 说明 | 95| -- | -- | 96| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) | 返回创建完成的组件操作指针,如果创建失败返回NULL。 | 97 98### disposeNode() 99 100``` 101void (*disposeNode)(ArkUI_NodeHandle node) 102``` 103 104**描述:** 105 106销毁组件指针指向的组件对象。 107 108**参数:** 109 110| 参数项 | 描述 | 111| -- | -- | 112| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 组件指针对象。 | 113 114### addChild() 115 116``` 117int32_t (*addChild)(ArkUI_NodeHandle parent, ArkUI_NodeHandle child) 118``` 119 120**描述:** 121 122 123将组件挂载到某个父节点之下。 124 125**参数:** 126 127| 参数项 | 描述 | 128| -- | -- | 129| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) parent | 父节点指针。 | 130| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) child | 子节点指针。 | 131 132**返回:** 133 134| 类型 | 说明 | 135| -- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 136| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。<br> [ARKUI_ERROR_CODE_ARKTS_NODE_NOT_SUPPORTED](capi-native-type-h.md#arkui_errorcode) 禁止对BuilderNode生成的节点进行设置属性、重置属性、设置事件与新增或修改子节点操作。 | 137 138### removeChild() 139 140``` 141int32_t (*removeChild)(ArkUI_NodeHandle parent, ArkUI_NodeHandle child) 142``` 143 144**描述:** 145 146 147将组件从父节点中移除。 148 149**参数:** 150 151| 参数项 | 描述 | 152| -- | -- | 153| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) parent | 父节点指针。 | 154| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) child | 子节点指针。 | 155 156**返回:** 157 158| 类型 | 说明 | 159| -- | -- | 160| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。<br> [ARKUI_ERROR_CODE_ARKTS_NODE_NOT_SUPPORTED](capi-native-type-h.md#arkui_errorcode) 禁止对BuilderNode生成的节点进行设置属性、重置属性、设置事件与新增或修改子节点操作。<br> ERROR_CODE_NATIVE_IMPL_NODE_ADAPTER_EXIST NodeAdapter已经存在。 | 161 162### insertChildAfter() 163 164``` 165int32_t (*insertChildAfter)(ArkUI_NodeHandle parent, ArkUI_NodeHandle child, ArkUI_NodeHandle sibling) 166``` 167 168**描述:** 169 170 171将组件挂载到某个父节点之下,挂载位置在<b>sibling</b>节点之后。 172 173**参数:** 174 175| 参数项 | 描述 | 176| -- | -- | 177| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) parent | 父节点指针。 | 178| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) child | 子节点指针。 | 179| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) sibling | 前一个兄弟节点指针,如果为空则插入位置在最后面。 | 180 181**返回:** 182 183| 类型 | 说明 | 184| -- | -- | 185| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。<br> [ARKUI_ERROR_CODE_ARKTS_NODE_NOT_SUPPORTED](capi-native-type-h.md#arkui_errorcode) 禁止对BuilderNode生成的节点进行设置属性、重置属性、设置事件与新增或修改子节点操作。 | 186 187### insertChildBefore() 188 189``` 190int32_t (*insertChildBefore)(ArkUI_NodeHandle parent, ArkUI_NodeHandle child, ArkUI_NodeHandle sibling) 191``` 192 193**描述:** 194 195 196将组件挂载到某个父节点之下,挂载位置在<b>sibling</b>节点之前。 197 198**参数:** 199 200| 参数项 | 描述 | 201| -- | -- | 202| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) parent | 父节点指针。 | 203| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) child | 子节点指针。 | 204| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) sibling | 后一个兄弟节点指针,如果为空则插入位置在最后面。 | 205 206**返回:** 207 208| 类型 | 说明 | 209| -- | -- | 210| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。<br> [ARKUI_ERROR_CODE_ARKTS_NODE_NOT_SUPPORTED](capi-native-type-h.md#arkui_errorcode) 禁止对BuilderNode生成的节点进行设置属性、重置属性、设置事件与新增或修改子节点操作。<br> ERROR_CODE_NATIVE_IMPL_NODE_ADAPTER_EXIST NodeAdapter已经存在。 | 211 212### insertChildAt() 213 214``` 215int32_t (*insertChildAt)(ArkUI_NodeHandle parent, ArkUI_NodeHandle child, int32_t position) 216``` 217 218**描述:** 219 220 221将组件挂载到某个父节点之下,挂载位置由<b>position</b>指定。 222 223**参数:** 224 225| 参数项 | 描述 | 226| -- | -- | 227| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) parent | 父节点指针。 | 228| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) child | 子节点指针。 | 229| int32_t position | 插入位置,如果插入位置为负数或者不存在,则默认插入位置在最后面。 | 230 231**返回:** 232 233| 类型 | 说明 | 234| -- | -- | 235| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。<br> [ARKUI_ERROR_CODE_ARKTS_NODE_NOT_SUPPORTED](capi-native-type-h.md#arkui_errorcode) 禁止对BuilderNode生成的节点进行设置属性、重置属性、设置事件与新增或修改子节点操作。<br> ERROR_CODE_NATIVE_IMPL_NODE_ADAPTER_EXIST NodeAdapter已经存在。 | 236 237### setAttribute() 238 239``` 240int32_t (*setAttribute)(ArkUI_NodeHandle node, ArkUI_NodeAttributeType attribute, const ArkUI_AttributeItem* item) 241``` 242 243**描述:** 244 245 246属性设置函数。 247 248**参数:** 249 250| 参数项 | 描述 | 251|------------------------------------------------------------------------------------| -- | 252| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 需要设置属性的节点对象。 | 253| [ArkUI_NodeAttributeType](capi-native-node-h.md#arkui_nodeattributetype) attribute | 需要设置的属性类型。 | 254| const [ArkUI_AttributeItem](capi-arkui-nativemodule-arkui-attributeitem.md)* item | 需要设置的属性值。 | 255 256**返回:** 257 258| 类型 | 说明 | 259| -- | -- | 260| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。<br> [ARKUI_ERROR_CODE_ATTRIBUTE_OR_EVENT_NOT_SUPPORTED](capi-native-type-h.md#arkui_errorcode) 系统中未找到Native接口的动态实现库。<br> [ARKUI_ERROR_CODE_ARKTS_NODE_NOT_SUPPORTED](capi-native-type-h.md#arkui_errorcode) 禁止对BuilderNode生成的节点进行设置属性、重置属性、设置事件与新增或修改子节点操作。<br> ERROR_CODE_NATIVE_IMPL_NODE_ADAPTER_EXIST NodeAdapter已经存在。 | 261 262### getAttribute() 263 264``` 265const ArkUI_AttributeItem* (*getAttribute)(ArkUI_NodeHandle node, ArkUI_NodeAttributeType attribute) 266``` 267 268**描述:** 269 270 271属性获取函数。该接口返回的指针是ArkUI框架内部的缓冲区指针,不需要开发者主动调用delete释放内存,但是需要在该函数下一次被调用前使用,否则可能会被其他值所覆盖。 272 273**参数:** 274 275| 参数项 | 描述 | 276|------------------------------------------------------------------------------------| -- | 277| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 需要获取属性的节点对象。 | 278| [ArkUI_NodeAttributeType](capi-native-node-h.md#arkui_nodeattributetype) attribute | 需要获取的属性类型。 | 279 280**返回:** 281 282| 类型 | 说明 | 283| -- | -- | 284| const ArkUI_AttributeItem* | 当前属性类型的属性值,失败返回空指针。 | 285 286### resetAttribute() 287 288``` 289int32_t (*resetAttribute)(ArkUI_NodeHandle node, ArkUI_NodeAttributeType attribute) 290``` 291 292**描述:** 293 294 295重置属性函数。 296 297**参数:** 298 299| 参数项 | 描述 | 300| -- | -- | 301| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 需要重置属性的节点对象。 | 302| [ArkUI_NodeAttributeType](capi-native-node-h.md#arkui_nodeattributetype) attribute | 需要重置的属性类型。 | 303 304**返回:** 305 306| 类型 | 说明 | 307| -- | -- | 308| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。<br> [ARKUI_ERROR_CODE_ATTRIBUTE_OR_EVENT_NOT_SUPPORTED](capi-native-type-h.md#arkui_errorcode) 系统中未找到Native接口的动态实现库。<br> [ARKUI_ERROR_CODE_ARKTS_NODE_NOT_SUPPORTED](capi-native-type-h.md#arkui_errorcode) 禁止对BuilderNode生成的节点进行设置属性、重置属性、设置事件与新增或修改子节点操作。 | 309 310### registerNodeEvent() 311 312``` 313int32_t (*registerNodeEvent)(ArkUI_NodeHandle node, ArkUI_NodeEventType eventType, int32_t targetId, void* userData) 314``` 315 316**描述:** 317 318 319注册节点事件函数。 320 321**参数:** 322 323| 参数项 | 描述 | 324|----------------------------------------------------------------------------|-----------------------------------------------------------------------------------------| 325| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 需要注册事件的节点对象。 | 326| [ArkUI_NodeEventType](capi-native-node-h.md#arkui_nodeeventtype) eventType | 需要注册的事件类型。 | 327| int32_t targetId | 自定义事件ID,当事件触发时在回调参数[ArkUI_NodeEvent](capi-arkui-nativemodule-arkui-nodeevent.md) 中携带回来。 | 328| void* userData | 自定义事件参数,当事件触发时在回调参数[ArkUI_NodeEvent](capi-arkui-nativemodule-arkui-nodeevent.md) 中携带回来。 | 329 330**返回:** 331 332| 类型 | 说明 | 333| -- | -- | 334| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。<br> [ARKUI_ERROR_CODE_ATTRIBUTE_OR_EVENT_NOT_SUPPORTED](capi-native-type-h.md#arkui_errorcode) 系统中未找到Native接口的动态实现库。<br> [ARKUI_ERROR_CODE_ARKTS_NODE_NOT_SUPPORTED](capi-native-type-h.md#arkui_errorcode) 禁止对BuilderNode生成的节点进行设置属性、重置属性、设置事件与新增或修改子节点操作。 | 335 336### unregisterNodeEvent() 337 338``` 339void (*unregisterNodeEvent)(ArkUI_NodeHandle node, ArkUI_NodeEventType eventType) 340``` 341 342**描述:** 343 344 345反注册节点事件函数。 346 347**参数:** 348 349| 参数项 | 描述 | 350|------------------------------------------------------------------|---------------| 351| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 需要反注册事件的节点对象。 | 352| [ArkUI_NodeEventType](capi-native-node-h.md#arkui_nodeeventtype) eventType | 需要反注册的事件类型。 | 353 354### registerNodeEventReceiver() 355 356``` 357void (*registerNodeEventReceiver)(void (*eventReceiver)(ArkUI_NodeEvent* event)) 358``` 359 360**描述:** 361 362 363注册事件回调统一入口函数。ArkUI框架会统一收集过程中产生的组件事件并通过注册的eventReceiver函数回调给开发者。<br> 重复调用时会覆盖前一次注册的函数。 避免直接保存ArkUI_NodeEvent对象指针,数据会在回调结束后销毁。<br> 如果需要和组件实例绑定,可以使用addNodeEventReceiver函数接口。<br> 364 365| 参数项 | 描述 | 366|-----|----| 367| eventReceiver | 事件回调统一入口函数。 | 368 369### unregisterNodeEventReceiver() 370 371``` 372void (*unregisterNodeEventReceiver)() 373``` 374 375**描述:** 376 377 378反注册事件回调统一入口函数。 379 380### markDirty() 381 382``` 383void (*markDirty)(ArkUI_NodeHandle node, ArkUI_NodeDirtyFlag dirtyFlag) 384``` 385 386**描述:** 387 388 389强制标记当前节点需要重新测算,布局或者绘制。系统属性设置更新场景下ArkUI框架会自动标记脏区并重新执行测算,布局或者绘制,不需要开发者主动调用该函数。 390 391**参数:** 392 393| 参数项 | 描述 | 394|----------------------------------------------------------------------------|--------------| 395| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 需要标记脏区的节点对象。 | 396| [ArkUI_NodeDirtyFlag](capi-native-node-h.md#arkui_nodedirtyflag) dirtyFlag | 脏区类型。 | 397 398### getTotalChildCount() 399 400``` 401uint32_t (*getTotalChildCount)(ArkUI_NodeHandle node) 402``` 403 404**描述:** 405 406 407获取子节点的个数。 408 409**参数:** 410 411| 参数项 | 描述 | 412| -- | -- | 413| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 414 415**返回:** 416 417| 类型 | 说明 | 418| -- | -- | 419| uint32_t | 子节点的个数, 如果没有返回0。 | 420 421### getChildAt() 422 423``` 424ArkUI_NodeHandle (*getChildAt)(ArkUI_NodeHandle node, int32_t position) 425``` 426 427**描述:** 428 429 430获取子节点。 431 432**参数:** 433 434| 参数项 | 描述 | 435| -- | -- | 436| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 437| int32_t position | 子组件的位置。 | 438 439**返回:** 440 441| 类型 | 说明 | 442| -- | -- | 443| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) | 返回组件的指针,如果没有返回NULL。 | 444 445### getFirstChild() 446 447``` 448ArkUI_NodeHandle (*getFirstChild)(ArkUI_NodeHandle node) 449``` 450 451**描述:** 452 453 454获取第一个子节点。 455 456**参数:** 457 458| 参数项 | 描述 | 459| -- | -- | 460| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 461 462**返回:** 463 464| 类型 | 说明 | 465| -- | -- | 466| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) | 返回组件的指针,如果没有返回NULL。 | 467 468### getLastChild() 469 470``` 471ArkUI_NodeHandle (*getLastChild)(ArkUI_NodeHandle node) 472``` 473 474**描述:** 475 476 477获取最后一个子节点。 478 479**参数:** 480 481| 参数项 | 描述 | 482| -- | -- | 483| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 484 485**返回:** 486 487| 类型 | 说明 | 488| -- | -- | 489| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) | 返回组件的指针,如果没有返回NULL。 | 490 491### getPreviousSibling() 492 493``` 494ArkUI_NodeHandle (*getPreviousSibling)(ArkUI_NodeHandle node) 495``` 496 497**描述:** 498 499 500获取上一个兄弟节点。 501 502**参数:** 503 504| 参数项 | 描述 | 505| -- | -- | 506| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 507 508**返回:** 509 510| 类型 | 说明 | 511| -- | -- | 512| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) | 返回组件的指针,如果没有返回NULL。 | 513 514### getNextSibling() 515 516``` 517ArkUI_NodeHandle (*getNextSibling)(ArkUI_NodeHandle node) 518``` 519 520**描述:** 521 522 523获取下一个兄弟节点。 524 525**参数:** 526 527| 参数项 | 描述 | 528| -- | -- | 529| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 530 531**返回:** 532 533| 类型 | 说明 | 534| -- | -- | 535| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) | 返回组件的指针,如果没有返回NULL。 | 536 537### registerNodeCustomEvent() 538 539``` 540int32_t (*registerNodeCustomEvent)(ArkUI_NodeHandle node, ArkUI_NodeCustomEventType eventType, int32_t targetId, void* userData) 541``` 542 543**描述:** 544 545 546注册自定义节点事件函数。事件触发时通过registerNodeCustomEventReceiver注册的自定义事件入口函数返回。 547 548**参数:** 549 550| 参数项 | 描述 | 551|----------------------------------------------------------------------------------------| -- | 552| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 需要注册事件的节点对象。 | 553| [ArkUI_NodeCustomEventType](capi-native-node-h.md#arkui_nodecustomeventtype) eventType | 需要注册的事件类型。 | 554| int32_t targetId | 自定义事件ID,当事件触发时在回调参数[ArkUI_NodeCustomEvent](capi-arkui-nativemodule-arkui-nodecustomevent.md) 中携带回来。 | 555| void* userData | 自定义事件参数,当事件触发时在回调参数[ArkUI_NodeCustomEvent](capi-arkui-nativemodule-arkui-nodecustomevent.md) 中携带回来。 | 556 557**返回:** 558 559| 类型 | 说明 | 560| -- | -- | 561| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。<br> [ARKUI_ERROR_CODE_ATTRIBUTE_OR_EVENT_NOT_SUPPORTED](capi-native-type-h.md#arkui_errorcode) 系统中未找到Native接口的动态实现库。 | 562 563### unregisterNodeCustomEvent() 564 565``` 566void (*unregisterNodeCustomEvent)(ArkUI_NodeHandle node, ArkUI_NodeCustomEventType eventType) 567``` 568 569**描述:** 570 571 572反注册自定义节点事件函数。 573 574**参数:** 575 576| 参数项 | 描述 | 577|----------------------------------------------------------------------------------------|---------------| 578| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 需要反注册事件的节点对象。 | 579| [ArkUI_NodeCustomEventType](capi-native-node-h.md#arkui_nodecustomeventtype) eventType | 需要反注册的事件类型。 | 580 581### registerNodeCustomEventReceiver() 582 583``` 584void (*registerNodeCustomEventReceiver)(void (*eventReceiver)(ArkUI_NodeCustomEvent* event)) 585``` 586 587**描述:** 588 589 590注册自定义节点事件回调统一入口函数。ArkUI框架会统一收集过程中产生的自定义组件事件并通过注册的registerNodeCustomEventReceiver函数回调给开发者。<br> 重复调用时会覆盖前一次注册的函数。<br> 避免直接保存ArkUI_NodeCustomEvent对象指针,数据会在回调结束后销毁。<br> 如果需要和组件实例绑定,可以使用addNodeCustomEventReceiver函数接口。<br> 591 592| 参数项 | 描述 | 593|-----|----| 594| eventReceiver | 事件回调统一入口函数。 | 595 596### unregisterNodeCustomEventReceiver() 597 598``` 599void (*unregisterNodeCustomEventReceiver)() 600``` 601 602**描述:** 603 604 605反注册自定义节点事件回调统一入口函数。 606 607### setMeasuredSize() 608 609``` 610int32_t (*setMeasuredSize)(ArkUI_NodeHandle node, int32_t width, int32_t height) 611``` 612 613**描述:** 614 615 616在测算回调函数中设置组件的测算完成后的宽和高。 617 618**参数:** 619 620| 参数项 | 描述 | 621| -- | -- | 622| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 623| int32_t width | 设置的宽。 | 624| int32_t height | 设置的高。 | 625 626**返回:** 627 628| 类型 | 说明 | 629| -- | -- | 630| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。 | 631 632### setLayoutPosition() 633 634``` 635int32_t (*setLayoutPosition)(ArkUI_NodeHandle node, int32_t positionX, int32_t positionY) 636``` 637 638**描述:** 639 640 641在布局回调函数中设置组件的位置。该接口优先级低于NODE_POSITION。 642 643**参数:** 644 645| 参数项 | 描述 | 646| -- | -- | 647| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 648| int32_t positionX | x轴坐标。 | 649| int32_t positionY | y轴坐标。 | 650 651**返回:** 652 653| 类型 | 说明 | 654| -- | -- | 655| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。 | 656 657### getMeasuredSize() 658 659``` 660ArkUI_IntSize (*getMeasuredSize)(ArkUI_NodeHandle node) 661``` 662 663**描述:** 664 665 666获取组件测算完成后的宽高尺寸。 667 668**参数:** 669 670| 参数项 | 描述 | 671| -- | -- | 672| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 673 674**返回:** 675 676| 类型 | 说明 | 677|-------------------| -- | 678| [ArkUI_IntSize](capi-arkui-nativemodule-arkui-intsize.md) | ArkUI_IntSize 组件的宽高。 | 679 680### getLayoutPosition() 681 682``` 683ArkUI_IntOffset (*getLayoutPosition)(ArkUI_NodeHandle node) 684``` 685 686**描述:** 687 688 689获取组件布局完成后的位置。 690 691**参数:** 692 693| 参数项 | 描述 | 694| -- | -- | 695| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 696 697**返回:** 698 699| 类型 | 说明 | 700|---------------------| -- | 701| [ArkUI_IntOffset](capi-arkui-nativemodule-arkui-intoffset.md) | ArkUI_IntOffset 组件的位置。 | 702 703### measureNode() 704 705``` 706int32_t (*measureNode)(ArkUI_NodeHandle node, ArkUI_LayoutConstraint* Constraint) 707``` 708 709**描述:** 710 711 712对特定组件进行测算,可以通过getMeasuredSize接口获取测算后的大小。 713 714**参数:** 715 716| 参数项 | 描述 | 717|------------------------------------------------------------------| -- | 718| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 719| [ArkUI_LayoutConstraint](capi-arkui-nativemodule-arkui-layoutconstraint.md)* Constraint | 约束尺寸。 | 720 721**返回:** 722 723| 类型 | 说明 | 724| -- | -- | 725| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。 | 726 727### layoutNode() 728 729``` 730int32_t (*layoutNode)(ArkUI_NodeHandle node, int32_t positionX, int32_t positionY) 731``` 732 733**描述:** 734 735 736对特定组件进行布局并传递该组件相对父组件的期望位置。 737 738**参数:** 739 740| 参数项 | 描述 | 741| -- | -- | 742| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 743| int32_t positionX | x轴坐标。 | 744| int32_t positionY | y轴坐标。 | 745 746**返回:** 747 748| 类型 | 说明 | 749| -- | -- | 750| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。 | 751 752### addNodeEventReceiver() 753 754``` 755int32_t (*addNodeEventReceiver)(ArkUI_NodeHandle node, void (*eventReceiver)(ArkUI_NodeEvent* event)) 756``` 757 758**描述:** 759 760 761在组件上添加组件事件回调函数,用于接受该组件产生的组件事件。不同于registerNodeEventReceiver的全局注册函数,该函数允许在同一个组件上添加多个事件接受器。<br> 该函数添加的监听回调函数触发时机会先与registerNodeEventReceiver注册的全局回调函数。<br> 避免直接保存ArkUI_NodeEvent对象指针,数据会在回调结束后销毁。<br> 762 763**参数:** 764 765| 参数项 | 描述 | 766|------------------------------------------------------------------| -- | 767| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 用于添加组件事件回调函数的对象。 | 768| eventReceiver | 组件事件回调函数。 | 769 770**返回:** 771 772| 类型 | 说明 | 773| -- | -- | 774| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。 | 775 776### removeNodeEventReceiver() 777 778``` 779int32_t (*removeNodeEventReceiver)(ArkUI_NodeHandle node, void (*eventReceiver)(ArkUI_NodeEvent* event)) 780``` 781 782**描述:** 783 784 785在组件上删除注册的组件事件回调函数。 786 787**参数:** 788 789| 参数项 | 描述 | 790|------------------------------------------------------------------| -- | 791| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 用于删除组件事件回调函数的对象。 | 792| eventReceiver | 待删除的组件事件回调函数。 | 793 794**返回:** 795 796| 类型 | 说明 | 797| -- | -- | 798| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。 | 799 800### addNodeCustomEventReceiver() 801 802``` 803int32_t (*addNodeCustomEventReceiver)(ArkUI_NodeHandle node, void (*eventReceiver)(ArkUI_NodeCustomEvent* event)) 804``` 805 806**描述:** 807 808 809在组件上添加自定义事件回调函数,用于接受该组件产生的自定义事件(如布局事件,绘制事件)。不同于registerNodeCustomEventReceiver的全局注册函数,该函数允许在同一个组件上添加多个事件接受器。<br> 该函数添加的监听回调函数触发时机会先与registerNodeCustomEventReceiver注册的全局回调函数。<br> 避免直接保存ArkUI_NodeCustomEvent对象指针,数据会在回调结束后销毁。<br> 810 811**参数:** 812 813| 参数项 | 描述 | 814|------------------------------------------------------------------| -- | 815| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 用于添加组件自定义事件回调函数的对象。 | 816| eventReceiver | 组件自定义事件回调函数。 | 817 818**返回:** 819 820| 类型 | 说明 | 821| -- | -- | 822| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。 | 823 824### removeNodeCustomEventReceiver() 825 826``` 827int32_t (*removeNodeCustomEventReceiver)(ArkUI_NodeHandle node, void (*eventReceiver)(ArkUI_NodeCustomEvent* event)) 828``` 829 830**描述:** 831 832 833在组件上删除注册的自定义事件回调函数。 834 835**参数:** 836 837| 参数项 | 描述 | 838|------------------------------------------------------------------| -- | 839| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 用于删除组件自定义事件回调函数的对象。 | 840| eventReceiver | 待删除的组件自定义事件回调函数。 | 841 842**返回:** 843 844| 类型 | 说明 | 845| -- | -- | 846| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。 | 847 848### setUserData() 849 850``` 851int32_t (*setUserData)(ArkUI_NodeHandle node, void* userData) 852``` 853 854**描述:** 855 856 857在组件上保存自定义数据。 858 859**参数:** 860 861| 参数项 | 描述 | 862| -- | -- | 863| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 用于保存自定义数据的组件。 | 864| void* userData | 要保存的自定义数据。 | 865 866**返回:** 867 868| 类型 | 说明 | 869| -- | -- | 870| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。 | 871 872### getUserData() 873 874``` 875void* (*getUserData)(ArkUI_NodeHandle node) 876``` 877 878**描述:** 879 880 881获取在组件上保存的自定义数据。 882 883**参数:** 884 885| 参数项 | 描述 | 886| -- | -- | 887| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 保存了自定义数据的组件。 | 888 889**返回:** 890 891| 类型 | 说明 | 892| -- | -- | 893| void* | 自定义数据。 | 894 895### setLengthMetricUnit() 896 897``` 898int32_t (*setLengthMetricUnit)(ArkUI_NodeHandle node, ArkUI_LengthMetricUnit unit) 899``` 900 901**描述:** 902 903 904指定组件的单位。 905 906**参数:** 907 908| 参数项 | 描述 | 909|-----------------------------------------------------------------------------| -- | 910| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 用于指定单位的组件。 | 911| [ArkUI_LengthMetricUnit](capi-native-type-h.md#arkui_lengthmetricunit) unit | 单位类型[ArkUI_LengthMetricUnit](capi-native-type-h.md#arkui_lengthmetricunit),默认为 ARKUI_LENGTH_METRIC_UNIT_DEFAULT。 | 912 913**返回:** 914 915| 类型 | 说明 | 916| -- | -- | 917| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。 | 918 919### getParent() 920 921``` 922ArkUI_NodeHandle (*getParent)(ArkUI_NodeHandle node) 923``` 924 925**描述:** 926 927 928获取父节点。 929 930**参数:** 931 932| 参数项 | 描述 | 933| -- | -- | 934| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) node | 目标节点对象。 | 935 936**返回:** 937 938| 类型 | 说明 | 939| -- | -- | 940| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) | 返回组件的指针,如果没有返回NULL。 | 941 942### removeAllChildren() 943 944``` 945int32_t (*removeAllChildren)(ArkUI_NodeHandle parent) 946``` 947 948**描述:** 949 950 951从父组件上卸载所有子节点。 952 953**起始版本:** 12 954 955**参数:** 956 957| 参数项 | 描述 | 958| -- | -- | 959| [ArkUI_NodeHandle](capi-arkui-nativemodule-arkui-node8h.md) parent | 目标节点对象。 | 960 961**返回:** 962 963| 类型 | 说明 | 964| -- | -- | 965| int32_t | 错误码。<br> [ARKUI_ERROR_CODE_NO_ERROR](capi-native-type-h.md#arkui_errorcode) 成功。<br> [ARKUI_ERROR_CODE_PARAM_INVALID](capi-native-type-h.md#arkui_errorcode) 函数参数异常。 | 966 967 968