1# XComponentNode 2 3提供XComponent节点XComponentNode,表示组件树中的[XComponent组件](arkui-ts/ts-basic-components-xcomponent.md#xcomponent),用于[EGL](../native-lib/egl.md)/[OpenGLES](../native-lib/opengles.md)和媒体数据写入,并支持动态修改节点渲染类型。 4 5> **说明:** 从API version 12开始,该接口不再维护,推荐使用[XComponent类型typeNode](./js-apis-arkui-frameNode.md#xcomponent12)的方式实现。 6> 7> 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8> 9> 当前不支持在预览器中使用XComponentNode。 10 11## 导入模块 12 13```ts 14import { XComponentNode } from "@kit.ArkUI"; 15``` 16 17## XComponentNode 18 19### constructor 20 21constructor(uiContext: UIContext, options: RenderOptions, id: string, type: XComponentType, libraryName?: string) 22 23XComponentNode的构造函数。 24 25**系统能力:** SystemCapability.ArkUI.ArkUI.Full 26 27**参数:** 28 29| 参数名 | 类型 | 必填 | 说明 | 30| ----------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 31| uiContext | [UIContext](js-apis-arkui-UIContext.md) | 是 | UI上下文,获取方式可参考[UIContext获取方法](./js-apis-arkui-node.md#uicontext获取方法)。 | 32| options | [RenderOptions](./js-apis-arkui-builderNode.md#renderoptions) | 是 | XComponentNode的构造可选参数。 | 33| id | string | 是 | XComponent的唯一标识,支持最大的字符串长度128。详见[XComponent组件](arkui-ts/ts-basic-components-xcomponent.md#xcomponent)。 | 34| type | [XComponentType](arkui-ts/ts-appendix-enums.md#xcomponenttype10) | 是 | 用于指定XComponent组件类型。详见[XComponent组件](arkui-ts/ts-basic-components-xcomponent.md#xcomponent)。 | 35| libraryName | string | 否 | Native层编译输出动态库名称。详见[XComponent组件](arkui-ts/ts-basic-components-xcomponent.md#xcomponent)。 | 36 37> **说明:** 38> 39> 需要显式指定[RenderOptions](./js-apis-arkui-builderNode.md#renderoptions)中的selfIdealSize,否则XComponentNode内容大小为空,不显示任何内容。 40 41### onCreate 42 43onCreate(event?: Object): void 44 45XComponentNode加载完成时触发该回调。 46 47**系统能力:** SystemCapability.ArkUI.ArkUI.Full 48 49**参数:** 50 51| 参数名 | 类型 | 必填 | 说明 | 52| ------ | ------ | ---- | ------------------------------------------------------------ | 53| event | Object | 否 | 获取XComponent实例对象的context,context上挂载的方法由开发者在c++层定义。 | 54 55### onDestroy 56 57onDestroy(): void 58 59XComponentNode销毁时触发该回调。 60 61**系统能力:** SystemCapability.ArkUI.ArkUI.Full 62 63### changeRenderType 64 65changeRenderType(type: NodeRenderType): boolean 66 67修改XComponentNode的渲染类型。 68 69**系统能力:** SystemCapability.ArkUI.ArkUI.Full 70 71**参数:** 72 73| 参数名 | 类型 | 必填 | 说明 | 74| ------ | ------------------------------------------------------------ | ---- | ------------------ | 75| type | [NodeRenderType](./js-apis-arkui-builderNode.md#noderendertype) | 是 | 需要修改的渲染类型。 | 76 77**返回值:** 78 79| 类型 | 描述 | 80| ---- | ---------------------- | 81| boolean | 修改渲染类型是否成功。 | 82 83## 示例 84 85```ts 86import { NodeController, FrameNode, XComponentNode, NodeRenderType, UIContext} from '@kit.ArkUI' 87 88class XComponentNodeController extends NodeController { 89 private xComponentNode: MyXComponentNode | null = null; 90 private soName: string = "tetrahedron_napi" // 该 so 由开发者通过 NAPI 编写并生成 91 92 constructor() { 93 super(); 94 } 95 96 makeNode(context: UIContext): FrameNode | null { 97 this.xComponentNode = new MyXComponentNode(context, { 98 selfIdealSize: { width: 200, height: 200 } 99 }, "xComponentId", XComponentType.SURFACE, this.soName); 100 return this.xComponentNode; 101 } 102 103 changeRenderType(renderType: NodeRenderType): void { 104 if (this.xComponentNode) { 105 this.xComponentNode.changeRenderType(renderType); 106 } 107 } 108} 109 110class MyXComponentNode extends XComponentNode { 111 onCreate(event: Object) { 112 // do something when XComponentNode has created 113 } 114 115 onDestroy() { 116 // do something when XComponentNode is destroying 117 } 118} 119 120@Entry 121@Component 122struct Index { 123 build() { 124 Row() { 125 Column() { 126 NodeContainer(new XComponentNodeController()) 127 } 128 .width('100%') 129 .height('100%') 130 } 131 .height('100%') 132 } 133} 134``` 135 136 137 138<!--Del--> 139> **说明:** 140> 141> 示例中的Native层编译输出动态库参考自[OpenGL三棱椎(API10)](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Native/NdkOpenGL),生成完整示例需下载该工程后将cpp目录下所有文件拷贝至本工程cpp目录下。 142<!--DelEnd--> 143