XComponent
The <XComponent> can accept and display the EGL/OpenGL ES and media data input.
NOTE
This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version.
Child Components
Child components are not supported when type is set to "surface".
Since API version 9, child components are supported when type is set to "component".
APIs
XComponent(value: {id: string, type: string, libraryname?: string, controller?: XComponentController})
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
id | string | Yes | Unique ID of the component. The value can contain a maximum of 128 characters. |
type | string | Yes | Type of the component. The options are as follows: - "surface": The content of the component is displayed individually, without being combined with that of other components. This option is used for displaying EGL/OpenGL ES and media data. - "component"9+: The component becomes a container where non-UI logic can be executed to dynamically load the display content. |
libraryname | string | No | Name of the dynamic library generated after compilation at the application native layer. This parameter is valid only when the component type is "surface". |
controller | XComponentcontroller | No | Controller bound to the component, which can be used to invoke methods of the component. This parameter is valid only when the component type is "surface". |
NOTE
When type is set to "component", the <XComponent> functions as a container, where child components are laid out vertically.
The component does not respond to any events.
Layout changes and event responses can be set by mounting child components.
The non-UI logic written internally needs to be encapsulated in one or more functions.
Attributes
- You can customize the content displayed in the <XComponent>. Among the universal attributes, the background, opacity, and image effects attributes are not supported.
- When type is set to "surface", you are advised to use the APIs provided by the EGL/OpenGL ES to set the display content.
- When type is set to "component", you are advised to mount child components to set the display content.
Events
The following events are supported only when type is set to "surface". The universal events and universal gestures are not supported.
onLoad
onLoad(callback: (event?: object) => void )
Triggered when the plug-in is loaded.
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
event | object | No | Context of the <XComponent> object. The APIs contained in the context are defined at the C++ layer by developers. |
onDestroy
onDestroy(event: () => void )
Triggered when the plug-in is destroyed.
XComponentController
Defines the controller of the <XComponent>. You can bind the controller to the <XComponent> to invoke the methods of the component through the controller.
Creating an Object
xcomponentController: XComponentController = new XComponentController()
getXComponentSurfaceId
getXComponentSurfaceId(): string
Obtains the ID of the surface held by the <XComponent>. The ID can be used for @ohos interfaces. For details, see Camera Management. This API works only when type of the <XComponent> is set to "surface".
Return value
Type | Description |
---|---|
string | ID of the surface held by the <XComponent>. |
setXComponentSurfaceSize
setXComponentSurfaceSize(value: {surfaceWidth: number, surfaceHeight: number}): void
Sets the width and height of the surface held by the <XComponent>. This API works only when type of the <XComponent> is set to "surface".
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
surfaceWidth | number | Yes | Width of the surface held by the <XComponent>. |
surfaceHeight | number | Yes | Height of the surface held by the <XComponent>. |
getXComponentContext
getXComponentContext(): Object
Obtains the context of an <XComponent> object. This API works only when type of the <XComponent> is set to "surface".
Return value
Type | Description |
---|---|
Object | Context of the <XComponent> object. The APIs contained in the context are defined by developers. |
Example
You can preview how this component looks on a real device. The preview is not yet available in the DevEco Studio Previewer.
// xxx.ets
@Entry
@Component
struct PreviewArea {
private surfaceId : string =''
xcomponentController: XComponentController = new XComponentController()
build() {
Row() {
XComponent({
id: 'xcomponent',
type: 'surface',
controller: this.xcomponentController
})
.onLoad(() => {
this.xcomponentController.setXComponentSurfaceSize({surfaceWidth:1920,surfaceHeight:1080});
this.surfaceId = this.xcomponentController.getXComponentSurfaceId()
})
.width('640px')
.height('480px')
}
.backgroundColor(Color.Black)
.position({x: 0, y: 48})
}
}