# Class (UIObserver)
提供UI组件行为变化的无感监听能力。
> **说明:**
>
> - 本模块首批接口从API version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
>
> - 本Class首批接口从API version 11开始支持。
>
> - 以下API需先使用UIContext中的[getUIObserver()](arkts-apis-uicontext-uicontext.md#getuiobserver11)方法获取到UIObserver对象,再通过该对象调用对应方法。
>
> - UIObserver仅能监听到本进程内的相关信息,不支持获取[UIExtensionComponent](../../reference/apis-arkui/arkui-ts/ts-container-ui-extension-component-sys.md)等跨进程场景的信息。
## on('navDestinationUpdate')11+
on(type: 'navDestinationUpdate', callback: Callback\): void
监听[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的状态变化。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'navDestinationUpdate',即[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的状态变化。 |
| callback | Callback\ | 是 | 回调函数。返回当前的[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件状态。 |
**示例:**
```ts
// Index.ets
// 演示uiObserver.on('navDestinationUpdate', callback)
// uiObserver.off('navDestinationUpdate', callback)
@Component
struct PageOne {
build() {
NavDestination() {
Text("pageOne")
}.title("pageOne")
}
}
@Entry
@Component
struct Index {
private stack: NavPathStack = new NavPathStack();
@Builder
PageBuilder(name: string) {
PageOne()
}
aboutToAppear() {
// 添加监听
this.getUIContext().getUIObserver().on('navDestinationUpdate', (info) => {
console.info('NavDestination state update', JSON.stringify(info));
});
}
aboutToDisappear() {
// 取消监听,不选择回调时,取消所有监听的回调
this.getUIContext().getUIObserver().off('navDestinationUpdate');
}
build() {
Column() {
Navigation(this.stack) {
Button("push").onClick(() => {
// 将PageOne的NavDestination入栈
this.stack.pushPath({ name: "pageOne" });
})
}
.title("Navigation")
.navDestination(this.PageBuilder)
}
.width('100%')
.height('100%')
}
}
```
## off('navDestinationUpdate')11+
off(type: 'navDestinationUpdate', callback?: Callback\): void
取消监听[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的状态变化。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'navDestinationUpdate',即[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的状态变化。 |
| callback | Callback\ | 否 | 需要取消的监听回调,不传参数时,取消所有的[Navigation](arkui-ts/ts-basic-components-navigation.md)监听回调。 |
**示例:**
参考[on('navDestinationUpdate')](#onnavdestinationupdate11)接口示例。
## on('navDestinationUpdate')11+
on(type: 'navDestinationUpdate', options: { navigationId: ResourceStr }, callback: Callback\): void
通过[Navigation](arkui-ts/ts-basic-components-navigation.md)的id监听[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的状态变化。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'navDestinationUpdate',即[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的状态变化。 |
| options | { navigationId: [ResourceStr](arkui-ts/ts-types.md#resourcestr) } | 是 | 指定监听的[Navigation](arkui-ts/ts-basic-components-navigation.md)的id。 |
| callback | Callback\ | 是 | 回调函数。返回当前的[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件状态。 |
**示例:**
```ts
// Index.ets
// 演示uiObserver.on('navDestinationUpdate', options, callback)
// uiObserver.off('navDestinationUpdate', options, callback)
@Component
struct PageOne {
build() {
NavDestination() {
Text("pageOne")
}.title("pageOne")
}
}
@Entry
@Component
struct Index {
private stack: NavPathStack = new NavPathStack();
@Builder
PageBuilder(name: string) {
PageOne()
}
aboutToAppear() {
// 添加监听,指定Navigation的id
this.getUIContext().getUIObserver().on('navDestinationUpdate', { navigationId: "testId" }, (info) => {
console.info('NavDestination state update', JSON.stringify(info));
});
}
aboutToDisappear() {
// 取消监听,不选择回调时,取消所有监听的回调
this.getUIContext().getUIObserver().off('navDestinationUpdate', { navigationId: "testId" });
}
build() {
Column() {
Navigation(this.stack) {
Button("push").onClick(() => {
// 将PageOne的NavDestination入栈
this.stack.pushPath({ name: "pageOne" });
})
}
.id("testId")
.title("Navigation")
.navDestination(this.PageBuilder)
}
.width('100%')
.height('100%')
}
}
```
## off('navDestinationUpdate')11+
off(type: 'navDestinationUpdate', options: { navigationId: ResourceStr }, callback?: Callback\): void
取消通过[Navigation](arkui-ts/ts-basic-components-navigation.md)的id监听[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的状态变化。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'navDestinationUpdate',即[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的状态变化。 |
| options | { navigationId: [ResourceStr](arkui-ts/ts-types.md#resourcestr) } | 是 | 指定监听的[Navigation](arkui-ts/ts-basic-components-navigation.md)的id。 |
| callback | Callback\ | 否 |需要取消的监听回调,不传参数时,取消该[Navigation](arkui-ts/ts-basic-components-navigation.md)上所有的监听回调。 |
**示例:**
参考[on('navDestinationUpdate')](#onnavdestinationupdate11-1)接口示例。
## on('navDestinationUpdateByUniqueId')20+
on(type: 'navDestinationUpdateByUniqueId', navigationUniqueId: number, callback: Callback\): void
通过[Navigation](arkui-ts/ts-basic-components-navigation.md)的uniqueId监听[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的状态变化,uniqueId可通过[queryNavigationInfo](arkui-ts/ts-custom-component-api.md#querynavigationinfo12)获取。
**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'navDestinationUpdateByUniqueId',即[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的状态变化。 |
| navigationUniqueId | number | 是 | 指定监听的[Navigation](arkui-ts/ts-basic-components-navigation.md)的uniqueId,可以通过[queryNavigationInfo](arkui-ts/ts-custom-component-api.md#querynavigationinfo12)获取。 |
| callback | Callback\ | 是 | 回调函数。返回当前的[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件状态。 |
**示例:**
通过[Navigation](arkui-ts/ts-basic-components-navigation.md)的uniqueId,可以触发[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的状态变化。
```ts
// Index.ets
// 演示on('navDestinationUpdateByUniqueId', navigationUniqueId, callback)
// off('navDestinationUpdateByUniqueId', navigationUniqueId, callback)
@Component
struct PageOne {
private text = '';
private uniqueid = -1;
aboutToAppear() {
// 获取Navigation的uniqueId
let navigationUniqueId = this.queryNavigationInfo()?.uniqueId;
if (navigationUniqueId) {
this.uniqueid = navigationUniqueId.valueOf();
}
this.text = JSON.stringify(this.uniqueid);
// 添加监听,指定Navigation的uniqueId
this.getUIContext().getUIObserver().on('navDestinationUpdateByUniqueId', this.uniqueid, (info) => {
console.info('NavDestination state update navigationId', JSON.stringify(info));
});
}
aboutToDisappear() {
// 取消监听,不选择回调时,取消所有监听的回调
this.getUIContext().getUIObserver().off('navDestinationUpdateByUniqueId', this.uniqueid);
}
build() {
NavDestination() {
Text("pageOne")
Text('navigationUniqueId是:' + this.text)
.width('80%')
.height(50)
.margin(50)
.fontSize(20)
}.title("pageOne")
}
}
@Entry
@Component
struct Index {
private stack: NavPathStack = new NavPathStack();
@Builder
PageBuilder(name: string) {
PageOne()
}
build() {
Column() {
Navigation(this.stack) {
Button("push").onClick(() => {
// 将PageOne的NavDestination入栈
this.stack.pushPath({ name: "pageOne" });
})
}
.id("testId")
.title("Navigation")
.navDestination(this.PageBuilder)
}
.width('100%')
.height('100%')
}
}
```
## off('navDestinationUpdateByUniqueId')20+
off(type: 'navDestinationUpdateByUniqueId', navigationUniqueId: number, callback?: Callback\): void
取消通过[Navigation](arkui-ts/ts-basic-components-navigation.md)的uniqueId监听[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的变化。
**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'navDestinationUpdateByUniqueId',即[NavDestination](arkui-ts/ts-basic-components-navdestination.md)组件的状态变化。 |
| navigationUniqueId | number | 是 | 指定监听的[Navigation](arkui-ts/ts-basic-components-navigation.md)的uniqueId,可以通过[queryNavigationInfo](arkui-ts/ts-custom-component-api.md#querynavigationinfo12)获取。 |
| callback | Callback\ | 否 | 需要取消的监听回调,不传参数时,取消该[Navigation](arkui-ts/ts-basic-components-navigation.md)上所有的监听回调。 |
**示例:**
参考[on('navDestinationUpdateByUniqueId')](#onnavdestinationupdatebyuniqueid20)接口示例。
## on('scrollEvent')12+
on(type: 'scrollEvent', callback: Callback\): void
监听所有滚动组件滚动事件的开始和结束。滚动组件包括[List](./arkui-ts/ts-container-list.md)、[Grid](./arkui-ts/ts-container-grid.md)、[Scroll](./arkui-ts/ts-container-scroll.md)、[WaterFlow](./arkui-ts/ts-container-waterflow.md)、[ArcList](./arkui-ts/ts-container-arclist.md)。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'scrollEvent',即滚动事件的开始和结束。 |
| callback | Callback\ | 是 | 回调函数。返回滚动事件的信息。 |
**示例:**
```ts
// Index.ets
// 演示uiObserver.on('scrollEvent', callback)
// uiObserver.off('scrollEvent', callback)
// uiObserver.on('scrollEvent', options, callback)
// uiObserver.off('scrollEvent', options, callback)
import { UIObserver } from '@kit.ArkUI';
@Entry
@Component
struct Index {
scroller: Scroller = new Scroller();
observer: UIObserver = this.getUIContext().getUIObserver();
private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7];
build() {
Column() {
Column() {
Scroll(this.scroller) {
Column() {
ForEach(this.arr, (item: number) => {
Text(item.toString())
.width('90%')
.height(150)
.backgroundColor(0xFFFFFF)
.borderRadius(15)
.fontSize(16)
.textAlign(TextAlign.Center)
.margin({ top: 10 })
}, (item: string) => item)
}.width('100%')
}
.id('testId')
.height('80%')
}
.width('100%')
Row() {
Button('UIObserver on')
.onClick(() => {
// 添加监听
this.observer.on('scrollEvent', (info) => {
console.info('scrollEventInfo', JSON.stringify(info));
});
})
Button('UIObserver off')
.onClick(() => {
// 取消监听,不选择回调时,取消所有监听的回调
this.observer.off('scrollEvent');
})
}
Row() {
Button('UIObserverWithId on')
.onClick(() => {
// 添加监听,指定滚动组件的id
this.observer.on('scrollEvent', { id: 'testId' }, (info) => {
console.info('scrollEventInfo', JSON.stringify(info));
});
})
Button('UIObserverWithId off')
.onClick(() => {
// 取消监听,不选择回调时,取消所有监听的回调
this.observer.off('scrollEvent', { id: 'testId' });
})
}
}
.height('100%')
}
}
```
## off('scrollEvent')12+
off(type: 'scrollEvent', callback?: Callback\): void
取消监听所有滚动组件滚动事件的开始和结束。滚动组件包括[List](./arkui-ts/ts-container-list.md)、[Grid](./arkui-ts/ts-container-grid.md)、[Scroll](./arkui-ts/ts-container-scroll.md)、[WaterFlow](./arkui-ts/ts-container-waterflow.md)、[ArcList](./arkui-ts/ts-container-arclist.md)。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'scrollEvent',即滚动事件的开始和结束。 |
| callback | Callback\ | 否 | 回调函数。返回滚动事件的信息。不传参数时,取消所有滚动事件的监听回调。 |
**示例:**
参考[on('scrollEvent')](#onscrollevent12)接口示例。
## on('scrollEvent')12+
on(type: 'scrollEvent', options: observer.ObserverOptions, callback: Callback\): void
监听指定id的滚动组件滚动事件的开始和结束。滚动组件包括[List](./arkui-ts/ts-container-list.md)、[Grid](./arkui-ts/ts-container-grid.md)、[Scroll](./arkui-ts/ts-container-scroll.md)、[WaterFlow](./arkui-ts/ts-container-waterflow.md)、[ArcList](./arkui-ts/ts-container-arclist.md)。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'scrollEvent',即滚动事件的开始和结束。 |
| options | [observer.ObserverOptions](js-apis-arkui-observer.md#observeroptions12) | 是 | Observer选项,包含指定监听的滚动组件的id。 |
| callback | Callback\ | 是 | 回调函数。返回滚动事件的信息。 |
**示例:**
参考[on('scrollEvent')](#onscrollevent12)接口示例。
## off('scrollEvent')12+
off(type: 'scrollEvent', options: observer.ObserverOptions, callback?: Callback\): void
取消监听指定id的滚动组件滚动事件的开始和结束。滚动组件包括[List](./arkui-ts/ts-container-list.md)、[Grid](./arkui-ts/ts-container-grid.md)、[Scroll](./arkui-ts/ts-container-scroll.md)、[WaterFlow](./arkui-ts/ts-container-waterflow.md)、[ArcList](./arkui-ts/ts-container-arclist.md)。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'scrollEvent',即滚动事件的开始和结束。 |
| options | [observer.ObserverOptions](js-apis-arkui-observer.md#observeroptions12) | 是 | Observer选项,包含指定监听的滚动组件的id。 |
| callback | Callback\ | 否 | 回调函数。返回滚动事件的信息。不传参数时,取消所有滚动事件的监听回调。 |
**示例:**
参考[on('scrollEvent')](#onscrollevent12)接口示例。
## on('routerPageUpdate')11+
on(type: 'routerPageUpdate', callback: Callback\): void
监听[Router](arkts-apis-uicontext-router.md)中page页面的状态变化。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'routerPageUpdate',即[Router](arkts-apis-uicontext-router.md)中page页面的状态变化。 |
| callback | Callback\ | 是 | 回调函数。携带[RouterPageInfo](js-apis-arkui-observer.md#routerpageinfo)对象,返回当前的page页面状态。 |
**示例:**
```ts
// PageOne.ets
@Entry
@Component
struct PageOne {
build() {
Column() {
Text("pageOne")
}
}
}
```
```ts
// Index.ets
// 演示uiObserver.on('routerPageUpdate', callback)
// uiObserver.off('routerPageUpdate', callback)
@Entry
@Component
struct Index {
aboutToAppear() {
// 添加监听
this.getUIContext().getUIObserver().on('routerPageUpdate', (info) => {
console.info('router page update', JSON.stringify(info));
});
}
aboutToDisappear() {
// 取消监听,不选择回调时,取消所有监听的回调
this.getUIContext().getUIObserver().off('routerPageUpdate');
}
build() {
Column() {
Button("pushUrl").onClick(() => {
// router跳转到PageOne.ets页面
this.getUIContext().getRouter().pushUrl({ url: 'pages/PageOne' })
})
}
.width('100%')
.height('100%')
}
}
```
## off('routerPageUpdate')11+
off(type: 'routerPageUpdate', callback?: Callback\): void
取消监听[Router](arkts-apis-uicontext-router.md)中page页面的状态变化。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'routerPageUpdate',即[Router](arkts-apis-uicontext-router.md)中page页面的状态变化。 |
| callback | Callback\ | 否 | 需要被注销的回调函数。不传参数时,取消所有[Router](arkts-apis-uicontext-router.md)中page页面状态变化的监听回调。 |
**示例:**
参考[on('routerPageUpdate')](#onrouterpageupdate11)接口示例。
## on('densityUpdate')12+
on(type: 'densityUpdate', callback: Callback\): void
监听屏幕像素密度变化。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'densityUpdate',即屏幕像素密度变化。 |
| callback | Callback\ | 是 | 回调函数。携带[DensityInfo](./js-apis-arkui-observer.md#densityinfo12),返回变化后的屏幕像素密度。 |
**示例:**
```ts
// Index.ets
// 演示uiObserver.on('densityUpdate', callback)
// uiObserver.off('densityUpdate', callback)
import { uiObserver } from '@kit.ArkUI';
@Entry
@Component
struct Index {
@State density: number = 0;
@State message: string = '未注册监听';
// 定义监听回调函数
densityUpdateCallback = (info: uiObserver.DensityInfo) => {
this.density = info.density;
this.message = '变化后的DPI:' + this.density.toString();
}
build() {
Column() {
Text(this.message)
.fontSize(24)
.fontWeight(FontWeight.Bold)
Button('注册屏幕像素密度变化监听')
.margin({ bottom: 10 })
.onClick(() => {
this.message = '已注册监听';
// 添加监听
this.getUIContext().getUIObserver().on('densityUpdate', this.densityUpdateCallback);
})
Button('解除注册屏幕像素密度变化监听')
.onClick(() => {
this.message = '未注册监听';
// 取消监听
this.getUIContext().getUIObserver().off('densityUpdate', this.densityUpdateCallback);
})
}
}
}
```
## off('densityUpdate')12+
off(type: 'densityUpdate', callback?: Callback\): void
取消监听屏幕像素密度的变化。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------------------------------------------------------------- | ---- | -------------------------------------------------------------------------------------------- |
| type | string | 是 | 监听事件,固定为'densityUpdate',即屏幕像素密度变化。 |
| callback | Callback\ | 否 | 需要被注销的回调函数。若不指定具体的回调函数,则注销该[UIContext](arkts-apis-uicontext-uicontext.md)下所有屏幕像素密度变化事件监听。 |
**示例:**
参考[on('densityUpdate')](#ondensityupdate12)接口示例。
## on('willDraw')12+
on(type: 'willDraw', callback: Callback\): void
监听每一帧绘制指令下发情况。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'willDraw',即是否将要绘制。 |
| callback | Callback\ | 是 | 回调函数。 |
**示例:**
```ts
// Index.ets
// 演示uiObserver.on('willDraw', callback)
// uiObserver.off('willDraw', callback)
@Entry
@Component
struct Index {
// 定义监听回调函数
willDrawCallback = () => {
console.info("willDraw指令下发");
}
build() {
Column() {
Button('注册绘制指令下发监听')
.margin({ bottom: 10 })
.onClick(() => {
// 添加监听
this.getUIContext().getUIObserver().on('willDraw', this.willDrawCallback);
})
Button('解除注册绘制指令下发监听')
.onClick(() => {
// 取消监听
this.getUIContext().getUIObserver().off('willDraw', this.willDrawCallback);
})
}
}
}
```
## off('willDraw')12+
off(type: 'willDraw', callback?: Callback\): void
取消监听每一帧绘制指令下发情况。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'willDraw',即是否将要绘制。 |
| callback | Callback\ | 否 | 需要被注销的回调函数。不传参数时,取消所有绘制指令下发事件的监听回调。 |
**示例:**
参考[on('willDraw')](#onwilldraw12)接口示例。
## on('didLayout')12+
on(type: 'didLayout', callback: Callback\): void
监听每一帧布局完成情况。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'didLayout',即是否布局完成。 |
| callback | Callback\ | 是 | 回调函数。 |
**示例:**
```ts
// Index.ets
// 演示uiObserver.on('didLayout', callback)
// uiObserver.off('didLayout', callback)
@Entry
@Component
struct Index {
// 定义监听回调函数
didLayoutCallback = () => {
console.info("layout布局完成");
}
build() {
Column() {
Button('注册布局完成监听')
.margin({ bottom: 10 })
.onClick(() => {
// 添加监听
this.getUIContext().getUIObserver().on('didLayout', this.didLayoutCallback);
})
Button('解除注册注册布局完成监听')
.onClick(() => {
// 取消监听
this.getUIContext().getUIObserver().off('didLayout', this.didLayoutCallback);
})
}
}
}
```
## off('didLayout')12+
off(type: 'didLayout', callback?: Callback\): void
取消监听每一帧布局完成情况。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'didLayout',即是否布局完成。 |
| callback | Callback\ | 否 | 需要被注销的回调函数。不传参数时,取消所有布局完成的监听回调。 |
**示例:**
参考[on('didLayout')](#ondidlayout12)接口示例。
## on('navDestinationSwitch')12+
on(type: 'navDestinationSwitch', callback: Callback\): void
监听[Navigation](arkui-ts/ts-basic-components-navigation.md)的页面切换事件。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'navDestinationSwitch',即[Navigation](arkui-ts/ts-basic-components-navigation.md)的页面切换事件。 |
| callback | Callback\ | 是 | 回调函数。携带[NavDestinationSwitchInfo](js-apis-arkui-observer.md#navdestinationswitchinfo12),返回页面切换事件的信息。 |
**示例:**
```ts
// Index.ets
// 演示UIObserver.on('navDestinationSwitch', callback)
// UIObserver.off('navDestinationSwitch', callback)
import { uiObserver } from '@kit.ArkUI';
@Component
struct PageOne {
build() {
NavDestination() {
Text("pageOne")
}.title("pageOne")
}
}
// 定义监听回调函数
function callbackFunc(info: uiObserver.NavDestinationSwitchInfo) {
console.info(`testTag navDestinationSwitch from: ${JSON.stringify(info.from)} to: ${JSON.stringify(info.to)}`);
}
@Entry
@Component
struct Index {
private stack: NavPathStack = new NavPathStack();
@Builder
PageBuilder(name: string) {
PageOne()
}
aboutToAppear() {
let obs = this.getUIContext().getUIObserver();
// 添加监听
obs.on('navDestinationSwitch', callbackFunc);
}
aboutToDisappear() {
let obs = this.getUIContext().getUIObserver();
// 取消监听
obs.off('navDestinationSwitch', callbackFunc);
}
build() {
Column() {
Navigation(this.stack) {
Button("push").onClick(() => {
// 将PageOne的NavDestination入栈
this.stack.pushPath({ name: "pageOne" });
})
}
.title("Navigation")
.navDestination(this.PageBuilder)
}
.width('100%')
.height('100%')
}
}
```
## off('navDestinationSwitch')12+
off(type: 'navDestinationSwitch', callback?: Callback\): void
取消监听[Navigation](arkui-ts/ts-basic-components-navigation.md)的页面切换事件。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'navDestinationSwitch',即[Navigation](arkui-ts/ts-basic-components-navigation.md)的页面切换事件。 |
| callback | Callback\ | 否 | 需要被注销的回调函数。不传参数时,取消该[Navigation](arkui-ts/ts-basic-components-navigation.md)上所有的监听回调。 |
**示例:**
参考[on('navDestinationSwitch')](#onnavdestinationswitch12)接口示例。
## on('navDestinationSwitch')12+
on(type: 'navDestinationSwitch', observerOptions: observer.NavDestinationSwitchObserverOptions, callback: Callback\): void
通过监听选项监听[Navigation](arkui-ts/ts-basic-components-navigation.md)的页面切换事件。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'navDestinationSwitch',即[Navigation](arkui-ts/ts-basic-components-navigation.md)的页面切换事件。 |
| observerOptions | observer.[NavDestinationSwitchObserverOptions](js-apis-arkui-observer.md#navdestinationswitchobserveroptions12) | 是 | 监听选项。 |
| callback | Callback\ | 是 | 回调函数。携带[NavDestinationSwitchInfo](js-apis-arkui-observer.md#navdestinationswitchinfo12),返回页面切换事件的信息。 |
**示例:**
```ts
// Index.ets
// 演示UIObserver.on('navDestinationSwitch', observerOptions, callback)
// UIObserver.off('navDestinationSwitch', observerOptions, callback)
import { uiObserver } from '@kit.ArkUI';
@Component
struct PageOne {
build() {
NavDestination() {
Text("pageOne")
}.title("pageOne")
}
}
// 定义监听回调函数
function callbackFunc(info: uiObserver.NavDestinationSwitchInfo) {
console.info(`testTag navDestinationSwitch from: ${JSON.stringify(info.from)} to: ${JSON.stringify(info.to)}`);
}
@Entry
@Component
struct Index {
private stack: NavPathStack = new NavPathStack();
@Builder
PageBuilder(name: string) {
PageOne()
}
aboutToAppear() {
let obs = this.getUIContext().getUIObserver();
// 添加监听,指定Navigation的id
obs.on('navDestinationSwitch', { navigationId: "myNavId" }, callbackFunc);
}
aboutToDisappear() {
let obs = this.getUIContext().getUIObserver();
// 取消监听
obs.off('navDestinationSwitch', { navigationId: "myNavId" }, callbackFunc);
}
build() {
Column() {
Navigation(this.stack) {
Button("push").onClick(() => {
// 将PageOne的NavDestination入栈
this.stack.pushPath({ name: "pageOne" });
})
}
.id("myNavId")
.title("Navigation")
.navDestination(this.PageBuilder)
}
.width('100%')
.height('100%')
}
}
```
## off('navDestinationSwitch')12+
off(type: 'navDestinationSwitch', observerOptions: observer.NavDestinationSwitchObserverOptions, callback?: Callback\): void
取消通过监听选项监听[Navigation](arkui-ts/ts-basic-components-navigation.md)的页面切换事件。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'navDestinationSwitch',即[Navigation](arkui-ts/ts-basic-components-navigation.md)的页面切换事件。 |
| observerOptions | observer.[NavDestinationSwitchObserverOptions](js-apis-arkui-observer.md#navdestinationswitchobserveroptions12) | 是 | 监听选项。 |
| callback | Callback\ | 否 | 需要被注销的回调函数。不传参数时,取消该[Navigation](arkui-ts/ts-basic-components-navigation.md)上所有的监听回调。 |
**示例:**
参考[on('navDestinationSwitch')](#onnavdestinationswitch12-1)接口示例。
## on('willClick')12+
on(type: 'willClick', callback: GestureEventListenerCallback): void
监听点击事件指令下发情况。回调类型为[GestureEventListenerCallback](arkts-apis-uicontext-t.md#gestureeventlistenercallback12)。从API version 20开始支持屏幕朗读触控模式。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'willClick',用于监听点击事件指令下发情况,所注册回调将于点击事件触发前触发。 |
| callback | [GestureEventListenerCallback](arkts-apis-uicontext-t.md#gestureeventlistenercallback12) | 是 | 回调函数。可以获得点击事件的[GestureEvent](arkui-ts/ts-gesture-common.md#gestureevent对象说明)和组件的[FrameNode](js-apis-arkui-frameNode.md)。 |
**示例:**
```ts
// Index.ets
// 演示uiObserver.on('willClick', callback)
// uiObserver.off('willClick', callback)
// uiObserver.off('didClick', callback)
// uiObserver.off('didClick', callback)
// 定义监听回调函数
function willClickGestureCallback(event: GestureEvent, node?: FrameNode) {
console.info('Example willClickCallback GestureEvent is called');
}
function willClickCallback(event: ClickEvent, node?: FrameNode) {
console.info('Example willClickCallback ClickEvent is called');
}
function didClickGestureCallback(event: GestureEvent, node?: FrameNode) {
console.info('Example didClickCallback GestureEvent is called');
}
function didClickCallback(event: ClickEvent, node?: FrameNode) {
console.info('Example didClickCallback ClickEvent is called');
}
@Entry
@Component
struct ClickExample {
@State clickCount: number = 0;
@State tapGestureCount: number = 0;
aboutToAppear(): void {
// 添加监听
let observer = this.getUIContext().getUIObserver();
observer.on('willClick', willClickGestureCallback);
observer.on('willClick', willClickCallback);
observer.on('didClick', didClickGestureCallback);
observer.on('didClick', didClickCallback);
}
aboutToDisappear(): void {
// 取消监听
let observer = this.getUIContext().getUIObserver();
observer.off('willClick', willClickGestureCallback);
observer.off('willClick', willClickCallback);
// 如果不选择回调,则会取消所有监听的回调
observer.off('didClick');
}
build() {
Column() {
/**
* onClick和TapGesture在后端的处理是一致的
* 所以无论是触发onClick还是触发TapGesture
* on('willClick')两种类型入参的回调(GestureEvent和ClickEvent)都会被触发
* 同理,on('didClick')的两种回调也会被触发
*/
Column() {
Text('Click Count: ' + this.clickCount)
}
.height(200)
.width(300)
.padding(20)
.border({ width: 3 })
.margin(50)
.onClick((event: ClickEvent) => {
this.clickCount++;
console.info('Example Click event is called');
})
Column() {
Text('TapGesture Count: ' + this.tapGestureCount)
}
.height(200)
.width(300)
.padding(20)
.border({ width: 3 })
.margin(50)
.gesture(TapGesture({ count: 2 }).onAction((event: TapGestureEvent) => {
this.tapGestureCount++;
console.info('Example Click event is called');
}))
}
}
}
```
## off('willClick')12+
off(type: 'willClick', callback?: GestureEventListenerCallback): void
取消监听点击事件指令下发情况。从API version 20开始支持屏幕朗读触控模式。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------------------- |
| type | string | 是 | 监听事件,固定为'willClick',即点击事件指令下发情况。 |
| callback | [GestureEventListenerCallback](arkts-apis-uicontext-t.md#gestureeventlistenercallback12) | 否 | 需要被注销的回调函数。不传参数时,取消所有的点击事件指令下发监听回调。 |
**示例:**
参考[on('willClick')](#onwillclick12)接口示例。
## on('didClick')12+
on(type: 'didClick', callback: GestureEventListenerCallback): void
监听点击事件指令下发情况。回调类型为[GestureEventListenerCallback](arkts-apis-uicontext-t.md#gestureeventlistenercallback12)。从API version 20开始支持屏幕朗读触控模式。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'didClick',用于监听点击事件指令下发情况,所注册回调将于点击事件触发后触发。 |
| callback | [GestureEventListenerCallback](arkts-apis-uicontext-t.md#gestureeventlistenercallback12) | 是 | 回调函数。可以获得点击事件的[GestureEvent](arkui-ts/ts-gesture-common.md#gestureevent对象说明)和组件的[FrameNode](js-apis-arkui-frameNode.md)。 |
**示例:**
参考[on('willClick')](#onwillclick12)接口示例。
## off('didClick')12+
off(type: 'didClick', callback?: GestureEventListenerCallback): void
取消监听点击事件指令下发情况。从API version 20开始,支持屏幕朗读触控模式。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ---------------------------------------------------- |
| type | string | 是 | 监听事件,固定为'didClick',即点击事件指令下发情况。 |
| callback | [GestureEventListenerCallback](arkts-apis-uicontext-t.md#gestureeventlistenercallback12) | 否 | 需要被注销的回调函数。不传参数时,取消所有的点击事件指令下发监听回调。 |
**示例:**
参考[on('willClick')](#onwillclick12)接口示例。
## on('willClick')12+
on(type: 'willClick', callback: ClickEventListenerCallback): void
监听点击事件指令下发情况。回调类型为[ClickEventListenerCallback](arkts-apis-uicontext-t.md#clickeventlistenercallback12)。从API version 20开始支持屏幕朗读触控模式。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'willClick',用于监听点击事件指令下发情况,所注册回调将于点击事件触发前触发。 |
| callback | [ClickEventListenerCallback](arkts-apis-uicontext-t.md#clickeventlistenercallback12) | 是 | 回调函数。可以获得点击事件的[ClickEvent](arkui-ts/ts-universal-events-click.md#clickevent对象说明)和组件的[FrameNode](js-apis-arkui-frameNode.md)。 |
**示例:**
参考[on('willClick')](#onwillclick12)接口示例。
## off('willClick')12+
off(type: 'willClick', callback?: ClickEventListenerCallback): void
取消监听点击事件指令下发情况。从API version 20开始,支持屏幕朗读触控模式。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ----------------------------------------------------- |
| type | string | 是 | 监听事件,固定为'willClick',即点击事件指令下发情况。 |
| callback | [ClickEventListenerCallback](arkts-apis-uicontext-t.md#clickeventlistenercallback12) | 否 | 需要被注销的回调函数。不传参数时,取消所有的点击事件指令下发监听回调。 |
**示例:**
参考[on('willClick')](#onwillclick12)接口示例。
## on('didClick')12+
on(type: 'didClick', callback: ClickEventListenerCallback): void
监听点击事件指令下发情况。回调类型为[ClickEventListenerCallback](arkts-apis-uicontext-t.md#clickeventlistenercallback12)。从API version 20开始支持屏幕朗读触控模式。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'didClick',用于监听点击事件指令下发情况,所注册回调将于点击事件触发后触发。 |
| callback | [ClickEventListenerCallback](arkts-apis-uicontext-t.md#clickeventlistenercallback12) | 是 | 回调函数。可以获得点击事件的[ClickEvent](arkui-ts/ts-universal-events-click.md#clickevent对象说明)和组件的[FrameNode](js-apis-arkui-frameNode.md)。 |
**示例:**
参考[on('willClick')](#onwillclick12)接口示例。
## off('didClick')12+
off(type: 'didClick', callback?: ClickEventListenerCallback): void
取消监听点击事件指令下发情况。从API version 20开始支持屏幕朗读触控模式。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ---------------------------------------------------- |
| type | string | 是 | 监听事件,固定为'didClick',即点击事件指令下发情况。 |
| callback | [ClickEventListenerCallback](arkts-apis-uicontext-t.md#clickeventlistenercallback12) | 否 | 需要被注销的回调函数。不传参数时,取消所有的点击事件指令下发监听回调。 |
**示例:**
参考[on('willClick')](#onwillclick12)接口示例。
## on('tabContentUpdate')12+
on(type: 'tabContentUpdate', callback: Callback\): void
监听[TabContent](arkui-ts/ts-container-tabcontent.md)页面的切换事件。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'tabContentUpdate',即[TabContent](arkui-ts/ts-container-tabcontent.md)页面的切换事件。 |
| callback | Callback\ | 是 | 回调函数。携带[TabContentInfo](js-apis-arkui-observer.md#tabcontentinfo12),返回[TabContent](arkui-ts/ts-container-tabcontent.md)页面切换事件的信息。 |
**示例:**
```ts
// Index.ets
// 演示uiObserver.on('tabContentUpdate', callback)
// uiObserver.off('tabContentUpdate', callback)
import { uiObserver } from '@kit.ArkUI';
// 定义监听回调函数
function callbackFunc(info: uiObserver.TabContentInfo) {
console.info('tabContentUpdate', JSON.stringify(info));
}
@Entry
@Component
struct TabsExample {
aboutToAppear(): void {
let observer = this.getUIContext().getUIObserver();
// 添加监听
observer.on('tabContentUpdate', callbackFunc);
}
aboutToDisappear(): void {
let observer = this.getUIContext().getUIObserver();
// 取消监听
observer.off('tabContentUpdate', callbackFunc);
}
build() {
Column() {
Tabs() {
TabContent() {
Column().width('100%').height('100%').backgroundColor('#00CB87')
}.tabBar('green').id('tabContentId0')
TabContent() {
Column().width('100%').height('100%').backgroundColor('#007DFF')
}.tabBar('blue').id('tabContentId1')
TabContent() {
Column().width('100%').height('100%').backgroundColor('#FFBF00')
}.tabBar('yellow').id('tabContentId2')
TabContent() {
Column().width('100%').height('100%').backgroundColor('#E67C92')
}.tabBar('pink').id('tabContentId3')
}
.width(360)
.height(296)
.backgroundColor('#F1F3F5')
.id('tabsId')
}.width('100%')
}
}
```
## off('tabContentUpdate')12+
off(type: 'tabContentUpdate', callback?: Callback\): void
取消监听[TabContent](arkui-ts/ts-container-tabcontent.md)页面的切换事件。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'tabContentUpdate',即[TabContent](arkui-ts/ts-container-tabcontent.md)页面的切换事件。 |
| callback | Callback\ | 否 | 需要被注销的回调函数。不传参数时,取消该[Tabs](arkui-ts/ts-container-tabs.md)上所有的监听回调。 |
**示例:**
参考[on('tabContentUpdate')](#ontabcontentupdate12)接口示例。
## on('tabContentUpdate')12+
on(type: 'tabContentUpdate', options: observer.ObserverOptions, callback: Callback\): void
通过[Tabs](arkui-ts/ts-container-tabs.md)组件的id监听[TabContent](arkui-ts/ts-container-tabcontent.md)页面的切换事件。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'tabContentUpdate',即[TabContent](arkui-ts/ts-container-tabcontent.md)页面的切换事件。 |
| options | observer.[ObserverOptions](js-apis-arkui-observer.md#observeroptions12) | 是 | 指定监听的[Tabs](arkui-ts/ts-container-tabs.md)组件的id。 |
| callback | Callback\ | 是 | 回调函数。携带TabContentInfo,返回[TabContent](arkui-ts/ts-container-tabcontent.md)页面切换事件的信息。 |
**示例:**
```ts
// Index.ets
// 演示uiObserver.on('tabContentUpdate', options, callback)
// uiObserver.off('tabContentUpdate', options, callback)
import { uiObserver } from '@kit.ArkUI';
// 定义监听回调函数
function callbackFunc(info: uiObserver.TabContentInfo) {
console.info('tabContentUpdate', JSON.stringify(info));
}
@Entry
@Component
struct TabsExample {
aboutToAppear(): void {
let observer = this.getUIContext().getUIObserver();
// 添加监听,指定Tabs的id
observer.on('tabContentUpdate', { id: 'tabsId' }, callbackFunc);
}
aboutToDisappear(): void {
let observer = this.getUIContext().getUIObserver();
// 取消监听
observer.off('tabContentUpdate', { id: 'tabsId' }, callbackFunc);
}
build() {
Column() {
Tabs() {
TabContent() {
Column().width('100%').height('100%').backgroundColor('#00CB87')
}.tabBar('green').id('tabContentId0')
TabContent() {
Column().width('100%').height('100%').backgroundColor('#007DFF')
}.tabBar('blue').id('tabContentId1')
TabContent() {
Column().width('100%').height('100%').backgroundColor('#FFBF00')
}.tabBar('yellow').id('tabContentId2')
TabContent() {
Column().width('100%').height('100%').backgroundColor('#E67C92')
}.tabBar('pink').id('tabContentId3')
}
.width(360)
.height(296)
.backgroundColor('#F1F3F5')
.id('tabsId')
}.width('100%')
}
}
```
## off('tabContentUpdate')12+
off(type: 'tabContentUpdate', options: observer.ObserverOptions, callback?: Callback\): void
取消通过[Tabs](arkui-ts/ts-container-tabs.md)组件的id监听[TabContent](arkui-ts/ts-container-tabcontent.md)页面的切换事件。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'tabContentUpdate',即[TabContent](arkui-ts/ts-container-tabcontent.md)页面的切换事件。 |
| options | observer.[ObserverOptions](js-apis-arkui-observer.md#observeroptions12) | 是 | 指定监听的[Tabs](arkui-ts/ts-container-tabs.md)组件的id。 |
| callback | Callback\ | 否 | 需要被注销的回调函数。不传参数时,取消该[Tabs](arkui-ts/ts-container-tabs.md)上所有的监听回调。 |
**示例:**
参考[on('tabContentUpdate')](#ontabcontentupdate12-1)接口示例。
## on('beforePanStart')19+
on(type: 'beforePanStart', callback: PanListenerCallback): void
监听Pan手势[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件,在[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件执行之前执行callback回调。支持手指滑动、鼠标滑动、鼠标滚轮和触摸板拖动,暂不支持屏幕朗读触控模式。
**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'beforePanStart',用于监听Pan手势[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件执行前的指令下发情况,所注册回调将于Pan手势[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件触发前触发。 |
| callback | [PanListenerCallback](arkts-apis-uicontext-t.md#panlistenercallback19) | 是 | 回调函数。可以获得Pan手势事件的[GestureEvent](arkui-ts/ts-gesture-common.md#gestureevent对象说明),[GestureRecognizer](arkui-ts/ts-gesture-common.md#gesturerecognizer12)和组件的[FrameNode](js-apis-arkui-frameNode.md)。 |
**示例:**
```ts
// Index.ets
// 演示uiObserver.on('beforePanStart', callback)
// uiObserver.off('beforePanStart', callback)
// uiObserver.on('afterPanStart', callback)
// uiObserver.off('afterPanStart', callback)
// uiObserver.on('beforePanEnd', callback)
// uiObserver.off('beforePanEnd', callback)
// uiObserver.on('afterPanEnd', callback)
// uiObserver.off('afterPanEnd', callback)
// 在页面Component中使用
let TEST_TAG: string = 'node';
// 定义监听回调函数
function callbackFunc() {
console.info('on == beforePanStart');
}
function afterPanCallBack() {
console.info('on == afterPanStart');
}
function beforeEndCallBack() {
console.info('on == beforeEnd');
}
function afterEndCallBack() {
console.info('on == afterEnd');
}
function beforeStartCallBack() {
console.info('on == beforeStartCallBack');
}
function panGestureCallBack(event: GestureEvent, current: GestureRecognizer, node?: FrameNode) {
TEST_TAG = 'panGestureEvent';
console.info('===' + TEST_TAG + '=== event.repeat is ' + event.repeat);
console.info('===' + TEST_TAG + '=== event target is ' + event.target.id);
TEST_TAG = 'panGestureCurrent';
console.info('===' + TEST_TAG + '=== current.getTag() is ' + current.getTag());
TEST_TAG = 'panGestureNode';
console.info('===' + TEST_TAG + '=== node?.getId() is ' + node?.getId());
}
@Entry
@Component
struct PanExample {
@State offsetX: number = 0;
@State offsetY: number = 0;
@State positionX: number = 0;
@State positionY: number = 0;
private panOption: PanGestureOptions = new PanGestureOptions({direction: PanDirection.All });
aboutToAppear(): void {
let observer = this.getUIContext().getUIObserver();
// 添加监听
observer.on('beforePanStart', callbackFunc);
observer.on('beforePanStart', panGestureCallBack);
observer.on('beforePanStart', beforeStartCallBack);
observer.on('afterPanStart', afterPanCallBack);
observer.on('beforePanEnd', beforeEndCallBack);
observer.on('afterPanEnd', afterEndCallBack);
}
aboutToDisappear(): void {
let observer = this.getUIContext().getUIObserver();
// 取消监听
observer.off('beforePanStart', callbackFunc);
observer.off('beforePanStart');
observer.off('afterPanStart', afterPanCallBack);
observer.off('beforePanEnd');
observer.off('afterPanEnd');
}
build() {
Column(){
Column(){
Text('PanGesture :\nX: ' + this.offsetX + '\n' + 'Y: ' + this.offsetY)
}
.height(200)
.width(300)
.padding(20)
.border({ width: 3 })
.margin(50)
.translate({ x: this.offsetX, y: this.offsetY, z: 0 })
.id('columnOuter')
.gesture(
PanGesture(this.panOption)
.onActionStart((event: GestureEvent) => {
console.info('Pan start');
})
.onActionUpdate((event: GestureEvent) => {
if (event) {
this.offsetX = this.positionX + event.offsetX;
this.offsetY = this.positionY + event.offsetY;
}
})
.onActionEnd((event: GestureEvent) => {
this.positionX = this.offsetX;
this.positionY = this.offsetY;
console.info('Pan end');
}))
}
}
}
```
## off('beforePanStart')19+
off(type: 'beforePanStart', callback?: PanListenerCallback): void
取消[on('beforePanStart')](#onbeforepanstart19)监听Pan手势[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件执行前的callback回调。
**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ---------------------------------------------------- |
| type | string | 是 | 监听事件,固定为'beforePanStart',即Pan手势[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件执行前的指令下发情况。 |
| callback | [PanListenerCallback](arkts-apis-uicontext-t.md#panlistenercallback19) | 否 | 需要被注销的回调函数。不传参数时,取消所有的Pan手势[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件执行前的指令下发监听回调。 |
**示例:**
参考[on('beforePanStart')](#onbeforepanstart19)接口示例。
## on('afterPanStart')19+
on(type: 'afterPanStart', callback: PanListenerCallback): void
监听Pan手势[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件执行后的指令下发情况,在[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件执行之后执行callback回调。支持手指滑动、鼠标滑动、鼠标滚轮和触摸板拖动,暂不支持屏幕朗读触控模式。
**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'afterPanStart',用于监听Pan手势[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件执行后的指令下发情况,所注册回调将于Pan手势[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件触发后触发。 |
| callback | [PanListenerCallback](arkts-apis-uicontext-t.md#panlistenercallback19) | 是 | 回调函数。可以获得Pan手势事件的[GestureEvent](arkui-ts/ts-gesture-common.md#gestureevent对象说明),[GestureRecognizer](arkui-ts/ts-gesture-common.md#gesturerecognizer12)和组件的[FrameNode](js-apis-arkui-frameNode.md)。 |
**示例:**
参考[on('beforePanStart')](#onbeforepanstart19)接口示例。
## off('afterPanStart')19+
off(type: 'afterPanStart', callback?: PanListenerCallback): void
取消[on('afterPanStart')](#onafterpanstart19)监听Pan手势[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#事件)事件执行后的callback回调。
**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ---------------------------------------------------- |
| type | string | 是 | 监听事件,固定为'afterPanStart',即Pan手势[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件执行后的指令下发情况。 |
| callback | [PanListenerCallback](arkts-apis-uicontext-t.md#panlistenercallback19) | 否 | 需要被注销的回调函数。不传参数时,取消所有的Pan手势[onActionStart](arkui-ts/ts-basic-gestures-pangesture.md#onactionstart)事件执行后的指令下发监听回调。 |
**示例:**
参考[on('beforePanStart')](#onbeforepanstart19)接口示例。
## on('beforePanEnd')19+
on(type: 'beforePanEnd', callback: PanListenerCallback): void
监听Pan手势[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件执行前的指令下发情况,在[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件执行之前执行callback回调。支持手指滑动、鼠标滑动、鼠标滚轮和触摸板拖动,暂不支持屏幕朗读触控模式。
**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'beforePanEnd',用于监听Pan手势[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件执行前的指令下发情况,所注册回调将于Pan手势[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件触发前触发。 |
| callback | [PanListenerCallback](arkts-apis-uicontext-t.md#panlistenercallback19) | 是 | 回调函数。可以获得Pan手势事件的[GestureEvent](arkui-ts/ts-gesture-common.md#gestureevent对象说明),[GestureRecognizer](arkui-ts/ts-gesture-common.md#gesturerecognizer12)和组件的[FrameNode](js-apis-arkui-frameNode.md)。 |
**示例:**
参考[on('beforePanStart')](#onbeforepanstart19)接口示例。
## off('beforePanEnd')19+
off(type: 'beforePanEnd', callback?: PanListenerCallback): void
取消[on('beforePanEnd')](#onbeforepanend19)监听Pan手势[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件执行前的callback回调。
**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ---------------------------------------------------- |
| type | string | 是 | 监听事件,固定为'beforePanEnd',即Pan手势[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件执行前的指令下发情况。 |
| callback | [PanListenerCallback](arkts-apis-uicontext-t.md#panlistenercallback19) | 否 | 需要被注销的回调函数。不传参数时,取消所有的Pan手势[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件执行前的指令下发监听回调。 |
**示例:**
参考[on('beforePanStart')](#onbeforepanstart19)接口示例。
## on('afterPanEnd')19+
on(type: 'afterPanEnd', callback: PanListenerCallback): void
监听Pan手势[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件执行后的指令下发情况,在[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件执行之后执行callback回调。支持手指滑动、鼠标滑动、鼠标滚轮和触摸板拖动,暂不支持屏幕朗读触控模式。
**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'beforePanEnd',用于监听Pan手势[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件执行后的指令下发情况,所注册回调将于Pan手势[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件触发后触发。 |
| callback | [PanListenerCallback](arkts-apis-uicontext-t.md#panlistenercallback19) | 是 | 回调函数。可以获得Pan手势事件的[GestureEvent](arkui-ts/ts-gesture-common.md#gestureevent对象说明),[GestureRecognizer](arkui-ts/ts-gesture-common.md#gesturerecognizer12)和组件的[FrameNode](js-apis-arkui-frameNode.md)。 |
**示例:**
参考[on('beforePanStart')](#onbeforepanstart19)接口示例。
## off('afterPanEnd')19+
off(type: 'afterPanEnd', callback?: PanListenerCallback): void
取消[on('afterPanEnd')](#onafterpanend19)监听Pan手势[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件执行后的callback回调。
**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ---------------------------------------------------- |
| type | string | 是 | 监听事件,固定为'afterPanEnd',即Pan手势[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件执行后的指令下发情况。 |
| callback | [PanListenerCallback](arkts-apis-uicontext-t.md#panlistenercallback19) | 否 | 需要被注销的回调函数。不传参数时,取消所有的Pan手势[onActionEnd](arkui-ts/ts-basic-gestures-pangesture.md#onactionend)事件执行后的指令下发监听回调。 |
**示例:**
参考[on('beforePanStart')](#onbeforepanstart19)接口示例。
## on('nodeRenderState')20+
on(type: 'nodeRenderState', nodeIdentity: NodeIdentity, callback: NodeRenderStateChangeCallback): void
注册一个回调函数,以便在特定节点的渲染状态发生变化时调用,当注册成功时,此回调将立即执行一次。
注意节点数量的限制。出于性能考虑,在单个UI实例中,注册节点太多,将会抛出异常。
通常,当组件被移动到屏幕外时,会收到RENDER_OUT的通知。但在某些情况下,即使组件移动到屏幕外也不会触发RENDER_OUT通知。例如,具有缓存功能的组件[Swiper](./arkui-ts/ts-container-swiper.md),即使[cachedCount](./arkui-ts/ts-container-swiper.md#cachedcount15)属性中的参数isShown配置为true,也不会触发RENDER_OUT通知。
**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | string | 是 | 监听事件,固定为'nodeRenderState',用于监听节点渲染状态发生改变。 |
| nodeIdentity | [NodeIdentity](arkts-apis-uicontext-t.md#nodeidentity20) | 是 | 节点标识。 |
| callback | [NodeRenderStateChangeCallback](arkts-apis-uicontext-t.md#noderenderstatechangecallback20) | 是 | 回调函数。可以获得节点渲染状态改变事件的[NodeRenderState](arkts-apis-uicontext-e.md#noderenderstate20)和组件的[FrameNode](js-apis-arkui-frameNode.md)。 |
**错误码:**
以下错误码的详细介绍请参见[注册节点渲染状态监听错误码](errorcode-node-render-monitor.md)。
| 错误码ID | 错误信息 |
| --------- | ------- |
| 161001 | The count of nodes monitoring render state is over the limitation. |
**示例:**
该示例展示了如何对目标组件添加监听和取消监听。当向左滑动,被监听组件从屏幕消失,会收到RENDER_OUT的通知,然后向右滑动,被监听组件重新出现在屏幕上,会收到RENDER_IN通知。
```ts
// Index.ets
// 演示uiObserver.on('nodeRenderState', nodeIdentity, callback)
// uiObserver.off('nodeRenderState', nodeIdentity, callback)
// 在页面Component中使用
import { NodeRenderState } from '@kit.ArkUI';
@Entry
@Component
struct Index {
@State fontColor: string = '#182431';
@State selectedFontColor: string = '#007DFF';
@State currentIndex: number = 0;
@State selectedIndex: number = 0;
@State notice: string = "";
private controller: TabsController = new TabsController();
@Builder
tabBuilder(index: number, name: string) {
Column() {
Text(name)
.fontColor(this.selectedIndex === index ? this.selectedFontColor : this.fontColor)
.fontSize(16)
.fontWeight(this.selectedIndex === index ? 500 : 400)
.lineHeight(22)
.margin({ top: 17, bottom: 7 })
Divider()
.strokeWidth(2)
.color('#007DFF')
.opacity(this.selectedIndex === index ? 1 : 0)
}.width('100%')
}
build() {
Column() {
Tabs({ barPosition: BarPosition.Start, index: this.currentIndex, controller: this.controller }) {
TabContent() {
Column() {
Column() {
Button("被监听节点").margin({ top: 5 }).id("button_1")
Button("添加监听").margin({ top: 5 }).onClick(() => {
let node: FrameNode | null = this.getUIContext().getFrameNodeById("button_1");
if (node) {
let observer = this.getUIContext().getUIObserver();
// 添加监听
observer.on("nodeRenderState", node?.getUniqueId(), (state: NodeRenderState, node?: FrameNode) => {
// 根据节点状态修改通知信息
if (state === 0) {
this.notice = "RENDER_IN";
} else {
this.notice = "RENDER_OUT";
}
console.info("节点状态发生改变,当前状态:", state);
})
}
})
Button("取消监听").margin({ top: 5 }).onClick(() => {
let node: FrameNode | null = this.getUIContext().getFrameNodeById("button_1");
if (node) {
let observer = this.getUIContext().getUIObserver();
// 取消监听,不选择回调时,取消所有监听的回调
observer.off("nodeRenderState", node?.getUniqueId());
}
this.notice = "";
})
}
}.width('100%').height('100%').backgroundColor('#00CB87')
}.tabBar(this.tabBuilder(0, 'green'))
TabContent() {
Column().width('100%').height('100%').backgroundColor('#007DFF')
}.tabBar(this.tabBuilder(1, 'blue'))
TabContent() {
Column().width('100%').height('100%').backgroundColor('#FFBF00')
}.tabBar(this.tabBuilder(2, 'yellow'))
TabContent() {
Column().width('100%').height('100%').backgroundColor('#E67C92')
}.tabBar(this.tabBuilder(3, 'pink'))
}
.vertical(false)
.barMode(BarMode.Fixed)
.barWidth(360)
.barHeight(56)
.animationDuration(400)
.onChange((index: number) => {
this.currentIndex = index;
this.selectedIndex = index;
})
.onAnimationStart((index: number, targetIndex: number, event: TabsAnimationEvent) => {
if (index === targetIndex) {
return;
}
this.selectedIndex = targetIndex;
})
.width(360)
.height(296)
.margin({ top: 52 })
.backgroundColor('#F1F3F5')
Text(`收到的通知: ${this.notice}`)
.fontSize(20)
.margin(10)
}.width('100%')
}
}
```

## off('nodeRenderState')20+
off(type: 'nodeRenderState', nodeIdentity: NodeIdentity, callback?: NodeRenderStateChangeCallback): void
取消监听节点渲染状态发生变化的callback回调。
**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------------------------- | ---- | ---------------------------------------------------- |
| type | string | 是 | 监听事件,固定为'nodeRenderState',即节点渲染状态变化指令下发情况。 |
| nodeIdentity | [NodeIdentity](arkts-apis-uicontext-t.md#nodeidentity20) | 是 | 节点标识。 |
| callback | [NodeRenderStateChangeCallback](arkts-apis-uicontext-t.md#noderenderstatechangecallback20) | 否 | 需要被注销的回调函数。不传参数时,取消该节点所有的渲染状态变化指令下发监听回调。 |
**示例:**
参考[on('nodeRenderState')](#onnoderenderstate20)接口示例。
## addGlobalGestureListener20+
addGlobalGestureListener(type: GestureListenerType, option: GestureObserverConfigs, callback: GestureListenerCallback): void
注册回调函数以监听手势触发信息。
**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------- | ---- | ----------- |
| type | [GestureListenerType](arkts-apis-uicontext-e.md#gesturelistenertype20) | 是 |要监听的手势类型。 |
| option | [GestureObserverConfigs](arkts-apis-uicontext-i.md#gestureobserverconfigs20) | 是 | 绑定全局监听器时的配置选项。 |
| callback | [GestureListenerCallback](arkts-apis-uicontext-t.md#gesturelistenercallback20) | 是 | 手势状态更新时的回调函数。 |
**示例:**
该示例使用全局手势监听器实时追踪Tap、Pan和LongPress三个独立区域的触发状态,记录各手势的触发次数和最后操作信息,并在组件生命周期内自动管理监听器的注册与注销。
```ts
// Index.ets
// 演示uiObserver.addGlobalGestureListener(type, option, callback)
// uiObserver.removeGlobalGestureListener(type, callback)
import { GestureListenerType, GestureActionPhase, GestureTriggerInfo, GestureListenerCallback } from '@kit.ArkUI';
@Entry
@Component
struct Index {
@State message: string = '全局手势监控';
@State tapCount: number = 0;
@State panCount: number = 0;
@State longPressCount: number = 0;
@State lastAction: string = '无';
@State lastArea: string = '无';
// 存储监听器回调引用
private tapCallback?: GestureListenerCallback;
private panCallback?: GestureListenerCallback;
private longPressCallback?: GestureListenerCallback;
// 启用全局监听
aboutToAppear() {
this.addGlobalListeners();
}
// 终止全局监听
aboutToDisappear() {
this.removeGlobalListeners();
}
private addGlobalListeners() {
const observer = this.getUIContext().getUIObserver();
// Tap监听任务
this.tapCallback = (info: GestureTriggerInfo) => {
if (info.event?.target?.id === 'tap-area') {
this.tapCount++;
this.lastAction = '点击';
this.lastArea = 'Tap区域';
}
};
observer.addGlobalGestureListener(
GestureListenerType.TAP,
{ actionPhases: [GestureActionPhase.WILL_START, GestureActionPhase.WILL_END] },
this.tapCallback
);
// Pan监听任务
this.panCallback = (info: GestureTriggerInfo) => {
if (info.event?.target?.id === 'pan-area') {
this.panCount++;
this.lastAction = '平移';
this.lastArea = 'Pan区域';
}
};
observer.addGlobalGestureListener(
GestureListenerType.PAN,
{
actionPhases: [GestureActionPhase.WILL_START, GestureActionPhase.WILL_END]
},
this.panCallback
);
// LongPress监听任务
this.longPressCallback = (info: GestureTriggerInfo) => {
if (info.event?.target?.id === 'longpress-area') {
this.longPressCount++;
this.lastAction = '长按';
this.lastArea = 'LongPress区域';
}
};
observer.addGlobalGestureListener(
GestureListenerType.LONG_PRESS,
{
actionPhases: [GestureActionPhase.WILL_START, GestureActionPhase.WILL_END]
},
this.longPressCallback
);
}
private removeGlobalListeners() {
const observer = this.getUIContext().getUIObserver();
if (this.tapCallback) {
observer.removeGlobalGestureListener(0, this.tapCallback);
}
if (this.panCallback) {
observer.removeGlobalGestureListener(2, this.panCallback);
}
if (this.longPressCallback) {
observer.removeGlobalGestureListener(1, this.longPressCallback);
}
}
build() {
Column() {
// 手势数据统计面板
Row({ space: 30 }) {
Column() {
Text('点击次数:').fontSize(16)
Text(`${this.tapCount}`).fontSize(24).fontColor('#FF6B81')
}
Column() {
Text('平移次数:').fontSize(16)
Text(`${this.panCount}`).fontSize(24).fontColor('#7BED9F')
}
Column() {
Text('长按次数:').fontSize(16)
Text(`${this.longPressCount}`).fontSize(24).fontColor('#70A1FF')
}
}
.margin(10)
Text(`最后动作: ${this.lastAction} (${this.lastArea})`)
.fontSize(18)
.margin(10)
// 手势区域
Row() {
Text('Tap区域').fontSize(18)
}
.id('tap-area')
.width('90%')
.height(120)
.margin(10)
.border({ width: 2, color: '#FF6B81' })
.justifyContent(FlexAlign.Center)
.gesture(TapGesture().onAction((event: GestureEvent)=>{
//具体实现内容
}))
Row() {
Text('Pan区域').fontSize(18)
}
.id('pan-area')
.width('90%')
.height(120)
.margin(10)
.border({ width: 2, color: '#7BED9F' })
.justifyContent(FlexAlign.Center)
.gesture(
PanGesture()
.onActionStart((event: GestureEvent) => {
//具体实现内容
})
.onActionEnd((event: GestureEvent) => {
//具体实现内容
})
)
Row() {
Text('LongPress区域').fontSize(18)
}
.id('longpress-area')
.width('90%')
.height(120)
.margin(10)
.border({ width: 2, color: '#70A1FF' })
.justifyContent(FlexAlign.Center)
.gesture(
LongPressGesture()
.onAction((event: GestureEvent)=>{
//具体实现内容
})
.onActionEnd((event: GestureEvent) => {
//具体实现内容
})
)
}
.width('100%')
.height('100%')
}
}
```

## removeGlobalGestureListener20+
removeGlobalGestureListener(type: GestureListenerType, callback?: GestureListenerCallback): void
移除某一手势监听器类型的回调函数。
**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ---------- | ---- | --------- |
| type | [GestureListenerType](arkts-apis-uicontext-e.md#gesturelistenertype20) | 是 | 要移除监听器的事件类型。 |
| callback | [GestureListenerCallback](arkts-apis-uicontext-t.md#gesturelistenercallback20) | 否 | 待移除的回调函数(未提供时将清除该手势类型的所有回调)。 |
**示例:**
参考[addGlobalGestureListener](#addglobalgesturelistener20)接口示例。