XComponentNode

The XComponentNode provide APIs a XComponentNode – a <XComponent> in the component tree. You can write EGL/OpenGL ES and media data and display it on the <XComponent>, whose rendering type can be dynamically modified.

NOTE

The initial APIs of this module are supported since API version 11. Newly added APIs will be marked with a superscript to indicate their earliest API version.

XComponentNode is not available in DevEco Studio Previewer.

Modules to Import

import { XComponentNode } from "@ohos.arkui.node";

XComponentNode

constructor

constructor(uiContext: UIContext, options: RenderOptions, id: string, type: XComponentType, libraryName?: string)

Constructor used to create an XComponentNode.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

Name Type Mandatory Description
uiContext UIContext Yes UI context. For details about how to obtain it, see [Obtaining UI Context.
options RenderOptions Yes Parameters for creating an XComponentNode.
id string Yes Unique ID of the <XComponent>. The value can contain a maximum of 128 characters. For details, see XComponent.
type XComponentType Yes Type of the <XComponent>. For details, see XComponent.
libraryName string No Name of the dynamic library generated during compilation at the native layer. For details, see XComponent.

NOTE

You need to explicitly specify selfIdealSize in RenderOptions. Otherwise, the XComponentNode's content size is empty and therefore no content is displayed.

onCreate

onCreate(event?: Object): void

Called when the XComponentNode loading is complete.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

Name Type Mandatory Description
event object No Context of the <XComponent> object. The APIs contained in the context are defined by you at the C++ layer.

onDestroy

onDestroy(): void

Called when the XComponentNode is destroyed.

System capability: SystemCapability.ArkUI.ArkUI.Full

changeRenderType

changeRenderType(type: NodeRenderType): boolean

Changes the rendering type of the XComponentNode.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

Name Type Mandatory Description
type NodeRenderType Yes Target rendering type.

Return value

Type Description
boolean Whether the rendering type is changed successfully.

Example

import { NodeController, FrameNode, XComponentNode, NodeRenderType } from "@ohos.arkui.node"
import { UIContext } from '@ohos.arkui.UIContext';

class XComponentNodeController extends NodeController {
  private xComponentNode: MyXComponentNode | null = null;
  private soName: string = "nativerender" // This .so file is compiled and generated by you using the N-API.

  constructor() {
    super();
  }

  makeNode(context: UIContext): FrameNode | null {
    this.xComponentNode = new MyXComponentNode(context, {
      selfIdealSize: { width: 200, height: 200 }
    }, "xComponentId", XComponentType.SURFACE, this.soName);
    return this.xComponentNode;
  }

  changeRenderType(renderType: NodeRenderType): void {
    if (this.xComponentNode) {
      this.xComponentNode.changeRenderType(renderType);
    }
  }
}

class MyXComponentNode extends XComponentNode {
  onCreate(event: Object) {
    // do something when XComponentNode has created
  }

  onDestroy() {
    // do something when XComponentNode is destroying
  }
}

@Entry
@Component
struct Index {
  build() {
    Row() {
      Column() {
        NodeContainer(new XComponentNodeController())
      }
      .width('100%')
      .height('100%')
    }
    .height('100%')
  }
}