• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 组件标识
2
3id为组件的唯一标识,在整个应用内唯一。本模块提供组件标识相关接口,可以获取指定id组件的属性,也提供向指定id组件发送事件的功能。
4
5>  **说明:**
6>
7> 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9
10## 属性
11
12| 名称   | 参数说明     | 描述                         |
13| -----| -------- | ----------------------------- |
14| id   | string   | 组件的唯一标识,唯一性由使用者保证。<br>默认值:''<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
15
16
17## 接口
18
19
20### getInspectorByKey<sup>9+</sup>
21
22getInspectorByKey(id: string): string
23
24获取指定id的组件的所有属性,不包括子组件信息。
25
26此接口仅用于对应用的测试。
27
28**参数:**
29
30| 参数   | 类型      | 必填     | 描述        |
31| ---- | -------- | ---- | -------------|
32| id   | string   | 是    | 要获取属性的组件id。 |
33
34**返回值:**
35
36| 类型        | 描述             |
37| -------| -------------- |
38| string | 组件属性列表的JSON字符串。 |
39
40### getInspectorTree<sup>9+</sup>
41
42getInspectorTree(): Object
43
44获取组件树及组件属性。
45
46此接口仅用于对应用的测试。
47
48**返回值:**
49
50| 类型     | 描述                            |
51| ------ | --------------------------- |
52| Object | 组件树及组件属性列表的JSON对象。 |
53
54### sendEventByKey<sup>9+</sup>
55
56sendEventByKey(id: string, action: number, params: string): boolean
57
58给指定id的组件发送事件。
59
60此接口仅用于对应用的测试。
61
62**参数:**
63
64| 参数       | 类型      | 必填       | 描述                         |
65| ------ | -------| ---- | -------------------------- |
66| id     | string | 是    | 要触发事件的组件的id。                      |
67| action | number | 是    | 要触发的事件类型,目前支持取值:<br/>-&nbsp;点击事件Click:&nbsp;10<br/>-&nbsp;长按事件LongClick:&nbsp;11。 |
68| params | string | 是    | 事件参数,无参数传空字符串&nbsp;""。            |
69
70**返回值:**
71
72| 类型          | 描述                         |
73| -------- | --------------------------|
74| boolean  | 找不到指定id的组件时返回false,其余情况返回true。 |
75
76### sendTouchEvent<sup>9+</sup>
77
78sendTouchEvent(event: TouchObject): boolean
79
80发送触摸事件。
81
82此接口仅用于对应用的测试。
83
84**参数:**
85
86| 参数      | 类型            | 必填  | 描述                                                         |
87| ----- | ----------- | ---- | ------------------------------------------------------------ |
88| event | [TouchObject](ts-universal-events-touch.md#touchobject对象说明) | 是    | 触发触摸事件的位置,event参数见[TouchEvent](ts-universal-events-touch.md#touchevent对象说明)中TouchObject的介绍。 |
89
90**返回值:**
91
92| 类型      | 描述                         |
93| ------- | ---------------------------|
94| boolean | 事件发送失败时返回false,其余情况返回true。 |
95
96### sendKeyEvent<sup>9+</sup>
97
98sendKeyEvent(event: KeyEvent): boolean
99
100发送按键事件。
101
102此接口仅用于对应用的测试。
103
104**参数:**
105
106| 参数    | 类型     | 必填      | 描述                                                         |
107| ----- | -------- | ----  | ------------------------------------------------------------ |
108| event | [KeyEvent](ts-universal-events-key.md#keyevent对象说明) | 是     | 按键事件,event参数见[KeyEvent](ts-universal-events-key.md#keyevent对象说明)介绍。 |
109
110**返回值:**
111
112| 类型      | 描述                           |
113| ------- | ------------------------------|
114| boolean | 事件发送失败时时返回false,其余情况返回true。 |
115
116### sendMouseEvent<sup>9+</sup>
117
118sendMouseEvent(event: MouseEvent): boolean
119
120发送鼠标事件。
121
122此接口仅用于对应用的测试。
123
124**参数:**
125
126| 参数     | 类型       | 必填       | 描述                                     |
127| ----- | ---------- | ----  | --------------------------------------- |
128| event | [MouseEvent](ts-universal-mouse-key.md#mouseevent对象说明) | 是    | 鼠标事件,event参数见[MouseEvent](ts-universal-mouse-key.md#mouseevent对象说明)介绍。 |
129
130**返回值:**
131
132| 类型      | 描述                                 |
133| ------- | ---------------------------------- |
134| boolean | 事件发送失败时返回false,其余情况返回true。 |
135
136## 示例
137
138```ts
139// xxx.ets
140class Utils {
141  static rect_left
142  static rect_top
143  static rect_right
144  static rect_bottom
145  static rect_value
146
147  //获取组件所占矩形区域坐标
148  static getComponentRect(key) {
149    let strJson = getInspectorByKey(key)
150    let obj = JSON.parse(strJson)
151    console.info("[getInspectorByKey] current component obj is: " + JSON.stringify(obj))
152    let rectInfo = JSON.parse('[' + obj.$rect + ']')
153    console.info("[getInspectorByKey] rectInfo is: " + rectInfo)
154    this.rect_left = JSON.parse('[' + rectInfo[0] + ']')[0]
155    this.rect_top = JSON.parse('[' + rectInfo[0] + ']')[1]
156    this.rect_right = JSON.parse('[' + rectInfo[1] + ']')[0]
157    this.rect_bottom = JSON.parse('[' + rectInfo[1] + ']')[1]
158    return this.rect_value = {
159      "left": this.rect_left, "top": this.rect_top, "right": this.rect_right, "bottom": this.rect_bottom
160    }
161  }
162}
163
164@Entry
165@Component
166struct IdExample {
167  @State text: string = ''
168
169  build() {
170    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
171
172      Button() {
173        Text('onKeyTab').fontSize(25).fontWeight(FontWeight.Bold)
174      }.margin({ top: 20 }).backgroundColor('#0D9FFB')
175      .onKeyEvent(() => {
176        this.text = "onKeyTab"
177      })
178
179      Button() {
180        Text('click to start').fontSize(25).fontWeight(FontWeight.Bold)
181      }.margin({ top: 20 })
182      .onClick(() => {
183        console.info(getInspectorByKey("click"))
184        console.info(JSON.stringify(getInspectorTree()))
185        this.text = "Button 'click to start' is clicked"
186        setTimeout(() => {
187          sendEventByKey("longClick", 11, "") // 向id为"longClick"的组件发送长按事件
188        }, 2000)
189      }).id('click')
190
191      Button() {
192        Text('longClick').fontSize(25).fontWeight(FontWeight.Bold)
193      }.margin({ top: 20 }).backgroundColor('#0D9FFB')
194      .gesture(
195      LongPressGesture().onActionEnd(() => {
196        console.info('long clicked')
197        this.text = "Button 'longClick' is longclicked"
198        setTimeout(() => {
199          let rect = Utils.getComponentRect('onTouch') // 获取id为"onTouch"组件的矩形区域坐标
200          let touchPoint: TouchObject = {
201            id: 1,
202            x: rect.left + (rect.right - rect.left) / 2, // 组件中心点x坐标
203            y: rect.top + (rect.bottom - rect.top) / 2, // 组件中心点y坐标
204            type: TouchType.Down,
205            screenX: rect.left + (rect.right - rect.left) / 2, // 组件中心点x坐标
206            screenY: rect.left + (rect.right - rect.left) / 2, // 组件中心点y坐标
207          }
208          sendTouchEvent(touchPoint) // 发送触摸事件
209          touchPoint.type = TouchType.Up
210          sendTouchEvent(touchPoint) // 发送触摸事件
211        }, 2000)
212      })).id('longClick')
213
214      Button() {
215        Text('onTouch').fontSize(25).fontWeight(FontWeight.Bold)
216      }.type(ButtonType.Capsule).margin({ top: 20 })
217      .onClick(() => {
218        console.info('onTouch is clicked')
219        this.text = "Button 'onTouch' is clicked"
220        setTimeout(() => {
221          let rect = Utils.getComponentRect('onMouse') // 获取id为"onMouse"组件的矩形区域坐标
222          let mouseEvent: MouseEvent = {
223            button: MouseButton.Left,
224            action: MouseAction.Press,
225            x: rect.left + (rect.right - rect.left) / 2, // 组件中心点x坐标
226            y: rect.top + (rect.bottom - rect.top) / 2, // 组件中心点y坐标
227            screenX: rect.left + (rect.right - rect.left) / 2, // 组件中心点x坐标
228            screenY: rect.top + (rect.bottom - rect.top) / 2, // 组件中心点y坐标
229            timestamp: 1,
230            target: {
231              area: {
232                width: 1,
233                height: 1,
234                position: {
235                  x: 1,
236                  y: 1
237                },
238                globalPosition: {
239                  x: 1,
240                  y: 1
241                }
242              }
243            },
244            source: SourceType.Mouse,
245            pressure: 1,
246            tiltX: 1,
247            tiltY: 1,
248            sourceTool: SourceTool.Unknown
249          }
250          sendMouseEvent(mouseEvent) // 发送鼠标事件
251        }, 2000)
252      }).id('onTouch')
253
254      Button() {
255        Text('onMouse').fontSize(25).fontWeight(FontWeight.Bold)
256      }.margin({ top: 20 }).backgroundColor('#0D9FFB')
257      .onMouse(() => {
258        console.info('onMouse')
259        this.text = "Button 'onMouse' in onMouse"
260        setTimeout(() => {
261          let keyEvent: KeyEvent = {
262            type: KeyType.Down,
263            keyCode: 2049,
264            keyText: 'tab',
265            keySource: 4,
266            deviceId: 0,
267            metaKey: 0,
268            timestamp: 0
269          }
270          sendKeyEvent(keyEvent) // 发送按键事件
271        }, 2000)
272      }).id('onMouse')
273
274      Text(this.text).fontSize(25).padding(15)
275    }
276    .width('100%').height('100%')
277  }
278}
279```
280