• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 组件区域变化事件
2
3组件区域变化事件指组件显示的尺寸、位置等发生变化时触发的事件。
4
5>  **说明:**
6>
7>  从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> onAreaChange回调执行仅与本组件有关,对祖先或子孙组件上的onAreaChange的回调没有严格的执行顺序和限制保障。
10
11## onAreaChange
12
13onAreaChange(event: (oldValue: Area, newValue: Area) => void): T
14
15组件区域变化时触发该回调。仅会响应由布局变化所导致的组件大小、位置发生变化时的回调。
16
17由绘制变化所导致的渲染属性变化不会响应回调,如[translate](ts-universal-attributes-transformation.md#translate)、[offset](ts-types.md#offset)。若组件自身位置由绘制变化决定也不会响应回调,如[bindSheet](ts-universal-attributes-sheet-transition.md#bindsheet)。
18
19>  **说明:**
20>
21> 当组件同时绑定onAreaChange事件和[position](ts-universal-attributes-location.md#position)属性时,onAreaChange事件响应设置[Position](ts-types.md#position)类型的position属性变化,不响应设置[Edges](ts-types.md#edges12)和[LocalizedEdges](ts-types.md#localizededges12)类型的position属性变化。
22
23**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
24
25**系统能力:** SystemCapability.ArkUI.ArkUI.Full
26
27**参数:**
28
29| 参数名   | 类型                      | 必填 | 说明                                                         |
30| -------- | ------------------------- | ---- | ------------------------------------------------------------ |
31| oldValue | [Area](ts-types.md#area8) | 是   | 返回目标元素变化之前的宽高以及目标元素相对父元素和页面左上角的坐标位置。 |
32| newValue | [Area](ts-types.md#area8) | 是   | 返回目标元素变化之后的宽高以及目标元素相对父元素和页面左上角的坐标位置。 |
33
34**返回值:**
35
36| 类型 | 说明 |
37| -------- | -------- |
38| T | 返回当前组件。 |
39
40## 示例
41
42该示例通过Text组件设置组件区域变化事件,当Text布局变化时可以触发onAreaChange事件,获取相关参数。
43
44```ts
45// xxx.ets
46@Entry
47@Component
48struct AreaExample {
49  @State value: string = 'Text'
50  @State sizeValue: string = ''
51
52  build() {
53    Column() {
54      Text(this.value)
55        .backgroundColor(Color.Green)
56        .margin(30)
57        .fontSize(20)
58        .onClick(() => {
59          this.value = this.value + 'Text'
60        })
61        .onAreaChange((oldValue: Area, newValue: Area) => {
62          console.info(`Ace: on area change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`)
63          this.sizeValue = JSON.stringify(newValue)
64        })
65      Text('new area is: \n' + this.sizeValue).margin({ right: 30, left: 30 })
66    }
67    .width('100%').height('100%').margin({ top: 30 })
68  }
69}
70```
71
72![zh-cn_image_0000001189634870](figures/zh-cn_image_0000001189634870.gif)