@ohos.arkui.inspector (布局回调)
提供注册组件布局和组件绘制送显完成回调通知的能力。
说明:
本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
本模块接口仅可在Stage模型下使用。
导入模块
import { inspector } from '@kit.ArkUI';
inspector.createComponentObserver(deprecated)
createComponentObserver(id: string): ComponentObserver
绑定指定组件,返回对应的监听句柄。
说明:
从API version 18开始废弃,建议使用UIContext中的getUIInspector方法获取UIInspector实例,再通过此实例调用替代方法createComponentObserver。
从API version 10开始,可以通过使用UIContext中的getUIInspector方法获取当前UI上下文关联的UIInspector对象。
原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | string | 是 | 指定组件id,该id通过通用属性id或者key设置。 |
返回值:
| 类型 | 说明 |
|---|---|
| ComponentObserver | 组件回调事件监听句柄,用于注册和取消注册监听回调。 |
示例:
let listener:inspector.ComponentObserver = inspector.createComponentObserver('COMPONENT_ID'); // 监听id为COMPONENT_ID的组件回调事件
ComponentObserver
组件布局和组件绘制送显完成回调的句柄,通过该句柄可调用以下方法。
on('layout')
on(type: 'layout', callback: () => void): void
通过句柄向对应的查询条件注册回调,当组件布局完成时会触发该回调。
原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | string | 是 | 必须填写字符串'layout'。 layout: 组件布局完成。 |
| callback | () => void | 是 | 监听layout的回调。 |
off('layout')
off(type: 'layout', callback?: () => void): void
通过句柄向对应的查询条件取消注册回调,当组件布局完成时不再触发指定的回调。
原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | string | 是 | 必须填写字符串'layout'。 layout: 组件布局完成。 |
| callback | () => void | 否 | 需要取消注册的回调,如果参数缺省则取消注册该句柄下所有的回调。callback需要和on('layout')方法中的callback为相同对象时才能取消回调成功。 |
on('draw')
on(type: 'draw', callback: () => void): void
通过句柄向对应的查询条件注册回调,当组件绘制送显完成时会触发该回调。
原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | string | 是 | 必须填写字符串'draw'。 draw: 组件绘制送显完成。 |
| callback | () => void | 是 | 监听draw的回调。 |
off('draw')
off(type: 'draw', callback?: () => void): void
通过句柄向对应的查询条件取消注册回调,当组件绘制送显完成时不再触发指定的回调。
原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | string | 是 | 必须填写字符串'draw'。 draw: 组件绘制送显完成。 |
| callback | () => void | 否 | 需要取消注册的回调,如果参数缺省则取消注册该句柄下所有的回调。callback需要和on('draw')方法中的callback为相同对象时才能取消回调成功。 |
on('drawChildren')20+
on(type: 'drawChildren', callback: Callback<void>): void
通过ComponentObserver注册drawChildren事件回调方法,当组件的子组件绘制送显完成时会触发该回调方法。如果组件树中存在多个drawChildren事件回调,只会触发在最顶层的drawChildren事件回调。取消最顶层的回调后,其余drawChildren事件回调也无法生效。
原子化服务API: 从API version 20开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | string | 是 | 必须填写字符串'drawChildren'。 drawChildren: 子组件绘制送显完成。 |
| callback | Callback<void> | 是 | 监听drawChildren的回调。 |
off('drawChildren')20+
off(type: 'drawChildren', callback?: Callback<void>): void
通过句柄向对应的查询条件取消注册回调,当组件的子组件绘制送显完成时不再触发指定的回调。
原子化服务API: 从API version 20开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | string | 是 | 必须填写字符串'drawChildren'。 drawChildren: 子组件绘制送显完成。 |
| callback | Callback<void> | 否 | 需要取消注册的回调,如果参数缺省则取消注册该句柄下所有的回调。callback需要和on('drawChildren')20+方法中的callback为相同对象时才能取消回调成功。 |
onLayoutChildren23+
onLayoutChildren(callback: Callback<void>): void
通过ComponentObserver注册layoutChildren事件回调。使用callback异步回调。
把当前注册监听的节点作为根节点,子树中的节点完成布局时,会触发该回调。如果组件树中存在多个layoutChildren事件回调,只会触发在最顶层的layoutChildren事件回调。取消最顶层的回调后,其余layoutChildren事件回调也无法生效。
原子化服务API: 从API version 23开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| callback | Callback<void> | 是 | 监听layoutChildren的回调。 |
offLayoutChildren23+
offLayoutChildren(callback?: Callback<void>): void
取消注册layoutChildren事件回调。使用callback异步回调。
要实现在子组件布局完成后停止触发特定回调,只需通过其句柄,在对应的查询条件上取消注册该回调即可。
原子化服务API: 从API version 23开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| callback | Callback<void> | 否 | 需要取消注册的回调,如果参数缺省则取消注册该句柄下所有的回调。callback需要和onLayoutChildren23+方法中的callback为相同对象时才能取消回调成功。 |
示例:
以下示例展示了inspector注册组件布局和组件绘制送显完成回调通知能力的基本用法。同时,通过onLayoutChildren23+接口监听子树中的节点完成布局时的回调事件。
import { inspector } from '@kit.ArkUI';
@Entry
@Component
struct ImageExample {
build() {
Column() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start }) {
Row({ space: 5 }) {
Image($r('app.media.startIcon'))
.width(110)
.height(110)
.border({ width: 1 })
.id('IMAGE_ID')
}
.id('ROW_ID')
}
}.height(320).width(360).padding({ right: 10, top: 10 })
}
listenerForImage: inspector.ComponentObserver = this.getUIContext().getUIInspector().createComponentObserver('IMAGE_ID')
listenerForRow: inspector.ComponentObserver = this.getUIContext().getUIInspector().createComponentObserver('ROW_ID')
aboutToAppear() {
let onLayoutComplete: () => void = (): void => {
// 根据需要补充实现代码
}
let onDrawComplete: () => void = (): void => {
// 根据需要补充实现代码
}
let onDrawChildrenComplete: () => void = (): void => {
// 根据需要补充实现代码
}
// 绑定当前js实例
let FuncLayout = onLayoutComplete
let FuncDraw = onDrawComplete
let FuncDrawChildren = onDrawChildrenComplete
let OffFuncLayout = onLayoutComplete
let OffFuncDraw = onDrawComplete
let OffFuncDrawChildren = onDrawChildrenComplete
this.listenerForImage.on('layout', FuncLayout)
this.listenerForImage.on('draw', FuncDraw)
this.listenerForRow.on('drawChildren', FuncDrawChildren)
// 通过句柄向对应的查询条件取消注册回调,由开发者自行决定在何时调用。
// this.listenerForImage.off('layout', OffFuncLayout)
// this.listenerForImage.off('draw', OffFuncDraw)
// this.listenerForRow.off('drawChildren', OffFuncDrawChildren)
let onLayoutChildrenComplete: () => void = (): void => {
// 监听到LayoutChildren事件后,用户可以自定义实现逻辑。
}
let uniqueId: number = this.getUniqueId();
let listenerForUniqueId: inspector.ComponentObserver = this.getUIContext().getUIInspector().createComponentObserver(uniqueId)
listenerForUniqueId.onLayoutChildren(onLayoutChildrenComplete)
}
// 通过句柄向对应的查询条件取消注册回调,由开发者自行决定在何时调用。
// listenerForUniqueId.offLayoutChildren(onLayoutChildrenComplete)
}
onDrawChildren24+
onDrawChildren(callback: Callback<number[]>): void
通过ComponentObserver注册drawChildren事件回调。使用callback异步回调。
把当前注册监听的节点作为根节点,组件的子组件绘制送显完成时,会触发该回调。如果组件树中存在多个drawChildren事件回调,只会触发在最顶层的drawChildren事件回调。取消最顶层的回调后,其余drawChildren事件回调也无法生效。
原子化服务API: 从API version 24开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| callback | Callback<number[]> | 是 | 监听drawChildren的回调。 |
示例:
以下示例展示了inspector注册组件布局和组件绘制送显完成回调通知能力的基本用法。监听子树内节点完成渲染后,通过onDrawChildren24+接口,回调返回该节点的uniqueId信息。
import { inspector } from '@kit.ArkUI';
@Entry
@Component
struct ImageExample {
build() {
Column() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start }) {
Row({ space: 5 }) {
Image($r('app.media.startIcon'))
.width(110)
.height(110)
.border({ width: 1 })
.id('IMAGE_ID')
}
.id('ROW_ID')
}
}.height(320).width(360).padding({ right: 10, top: 10 })
}
listenerForRow: inspector.ComponentObserver = this.getUIContext().getUIInspector().createComponentObserver('ROW_ID')
aboutToAppear() {
let onDrawChildrenComplete_uniqueId:(childIds: number[])=>void = (childIds: number[]) : void => {
// 从API version 24开始,新增onDrawChildren接口。监听到DrawChildren事件后,用户可以自定义实现逻辑。
}
let uniqueId: number = this.getUniqueId();
this.listenerForRow.onDrawChildren(onDrawChildrenComplete_uniqueId)
}
}
offDrawChildren24+
offDrawChildren(callback?: Callback<number[]>): void
取消注册drawChildren事件回调。使用callback异步回调。
要实现在子组件布局完成后停止触发特定回调,只需通过其句柄,在对应的查询条件上取消注册该回调即可。
原子化服务API: 从API version 24开始,该接口支持在原子化服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| callback | Callback<number[]> | 否 | 需要取消注册的回调,如果参数缺省则取消注册该句柄下所有的回调。callback需要和onDrawChildren方法中的callback为相同对象时才能取消回调成功。 |
示例:
import { inspector } from '@kit.ArkUI';
@Entry
@Component
struct ImageExample {
build() {
Column() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start }) {
Row({ space: 5 }) {
Image($r('app.media.startIcon'))
.width(110)
.height(110)
.border({ width: 1 })
.id('IMAGE_ID')
}
.id('ROW_ID')
}
}.height(320).width(360).padding({ right: 10, top: 10 })
}
listenerForRow: inspector.ComponentObserver = this.getUIContext().getUIInspector().createComponentObserver('ROW_ID')
aboutToAppear() {
let onDrawChildrenComplete_uniqueId:(childIds: number[])=>void = (childIds: number[]) : void => {
// 从API version 24开始,新增onDrawChildren接口。监听到DrawChildren事件后,用户可以自定义实现逻辑。
}
let uniqueId: number = this.getUniqueId();
this.listenerForRow.onDrawChildren(onDrawChildrenComplete_uniqueId)
}
// 通过句柄向对应的查询条件取消注册回调,由开发者自行决定在何时调用。
// this.listenerForRow.offDrawChildren(onDrawChildrenComplete_uniqueId)
}