ts-universal-attributes-component-id.md 8.9 KB
Newer Older
Z
zengyawen 已提交
1 2
# 组件标识

3 4
id为组件的唯一标识,在整个应用内唯一。本模块提供组件标识相关接口,可以获取指定id组件的属性,也提供向指定id组件发送事件的功能。

H
geshi  
HelloCrease 已提交
5
>  **说明:**
H
hebingxue 已提交
6
>
Z
zengyawen 已提交
7 8 9 10 11
> 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。


## 属性

H
hebingxue 已提交
12 13
| 名称   | 参数说明     | 描述                         |
| -----| -------- | ----------------------------- |
W
wangshuainan 已提交
14
| id   | string   | 组件的唯一标识,唯一性由使用者保证。<br>默认值:'' |
Z
zengyawen 已提交
15 16 17 18 19


## 接口


Z
zcdqs 已提交
20
### getInspectorByKey<sup>9+</sup>
Z
zengyawen 已提交
21 22 23 24 25

getInspectorByKey(id: string): string

获取指定id的组件的所有属性,不包括子组件信息。

H
hebingxue 已提交
26 27 28 29 30
**参数:**

| 参数   | 类型      | 必填     | 描述        |
| ---- | -------- | ---- | -------------|
| id   | string   | 是    | 要获取属性的组件id。 |
Z
zengyawen 已提交
31

H
hebingxue 已提交
32 33 34 35 36
**返回值:**

| 类型        | 描述             |
| -------| -------------- |
| string | 组件属性列表的JSON字符串。 |
Z
zengyawen 已提交
37

Z
zcdqs 已提交
38
### getInspectorTree<sup>9+</sup>
39 40 41 42 43

getInspectorTree(): string

获取组件树及组件属性。

H
hebingxue 已提交
44
**返回值:**
45

H
hebingxue 已提交
46 47 48
| 类型     | 描述                            |
| ------ | --------------------------- |
| string | 组件树及组件属性列表的JSON字符串。 |
Z
zengyawen 已提交
49

Z
zcdqs 已提交
50
### sendEventByKey<sup>9+</sup>
Z
zengyawen 已提交
51 52 53 54 55

sendEventByKey(id: string, action: number, params: string): boolean

给指定id的组件发送事件。

H
hebingxue 已提交
56 57 58 59 60 61 62 63 64
**参数:**

| 参数       | 类型      | 必填       | 描述                         |
| ------ | -------| ---- | -------------------------- |
| id     | string | 是    | 要触发事件的组件的id。                      |
| action | number | 是    | 要触发的事件类型,目前支持取值:<br/>-&nbsp;点击事件Click:&nbsp;10<br/>-&nbsp;长按事件LongClick:&nbsp;11。 |
| params | string | 是    | 事件参数,无参数传空字符串&nbsp;""。            |

**返回值:**
Z
zengyawen 已提交
65

H
hebingxue 已提交
66 67 68
| 类型          | 描述                         |
| -------- | --------------------------|
| boolean  | 找不到指定id的组件时返回false,其余情况返回true。 |
Z
zengyawen 已提交
69

Z
zcdqs 已提交
70
### sendTouchEvent<sup>9+</sup>
71 72 73 74 75

sendTouchEvent(event: TouchObject): boolean

发送触摸事件。

H
hebingxue 已提交
76
**参数:**
77

H
hebingxue 已提交
78 79
| 参数      | 类型            | 必填  | 描述                                                         |
| ----- | ----------- | ---- | ------------------------------------------------------------ |
M
match 已提交
80
| event | [TouchObject](ts-universal-events-touch.md#touchobject对象说明) | 是    | 触发触摸事件的位置,event参数见[TouchEvent](ts-universal-events-touch.md#touchevent对象说明)中TouchObject的介绍。 |
81

H
hebingxue 已提交
82
**返回值:**
83

H
hebingxue 已提交
84 85 86
| 类型      | 描述                         |
| ------- | ---------------------------|
| boolean | 事件发送失败时返回false,其余情况返回true。 |
87

Z
zcdqs 已提交
88
### sendKeyEvent<sup>9+</sup>
89 90 91 92 93

sendKeyEvent(event: KeyEvent): boolean

发送按键事件。

H
hebingxue 已提交
94
**参数:**
95

H
hebingxue 已提交
96 97
| 参数    | 类型     | 必填      | 描述                                                         |
| ----- | -------- | ----  | ------------------------------------------------------------ |
M
match 已提交
98
| event | [KeyEvent](ts-universal-events-key.md#keyevent对象说明) | 是     | 按键事件,event参数见[KeyEvent](ts-universal-events-key.md#keyevent对象说明)介绍。 |
99

H
hebingxue 已提交
100
**返回值:**
101

H
hebingxue 已提交
102 103 104
| 类型      | 描述                           |
| ------- | ------------------------------|
| boolean | 事件发送失败时时返回false,其余情况返回true。 |
105

Z
zcdqs 已提交
106
### sendMouseEvent<sup>9+</sup>
107 108 109 110 111

sendMouseEvent(event: MouseEvent): boolean

发送鼠标事件。

H
hebingxue 已提交
112
**参数:**
113

H
hebingxue 已提交
114 115
| 参数     | 类型       | 必填       | 描述                                     |
| ----- | ---------- | ----  | --------------------------------------- |
M
match 已提交
116
| event | [MouseEvent](ts-universal-mouse-key.md#mouseevent对象说明) | 是    | 鼠标事件,event参数见[MouseEvent](ts-universal-mouse-key.md#mouseevent对象说明)介绍。 |
117

H
hebingxue 已提交
118
**返回值:**
119

H
hebingxue 已提交
120 121 122
| 类型      | 描述                                 |
| ------- | ---------------------------------- |
| boolean | 事件发送失败时返回false,其余情况返回true。 |
Z
zengyawen 已提交
123 124 125

## 示例

H
geshi  
HelloCrease 已提交
126 127
```ts
// xxx.ets
128 129 130 131 132 133 134
class Utils {
  static rect_left;
  static rect_top;
  static rect_right;
  static rect_bottom;
  static rect_value;

M
match 已提交
135
  //获取组件所占矩形区域坐标
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
  static getComponentRect(key) {
    let strJson = getInspectorByKey(key);
    let obj = JSON.parse(strJson);
    console.info("[getInspectorByKey] current component obj is: " + JSON.stringify(obj));
    let rectInfo = JSON.parse('[' + obj.$rect + ']')
    console.info("[getInspectorByKey] rectInfo is: " + rectInfo);
    this.rect_left = JSON.parse('[' + rectInfo[0] + ']')[0]
    this.rect_top = JSON.parse('[' + rectInfo[0] + ']')[1]
    this.rect_right = JSON.parse('[' + rectInfo[1] + ']')[0]
    this.rect_bottom = JSON.parse('[' + rectInfo[1] + ']')[1]
    return this.rect_value = {
      "left": this.rect_left, "top": this.rect_top, "right": this.rect_right, "bottom": this.rect_bottom
    }
  }
}

Z
zengyawen 已提交
152 153 154
@Entry
@Component
struct IdExample {
155 156
  @State text: string = ''

Z
zengyawen 已提交
157 158
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
159

Z
zengyawen 已提交
160
      Button() {
161 162 163 164 165 166 167 168 169 170
        Text('onKeyTab').fontSize(25).fontWeight(FontWeight.Bold)
      }.margin({ top: 20 }).backgroundColor('#0D9FFB')
      .onKeyEvent(() => {
        this.text = "onKeyTab"
      })

      Button() {
        Text('click to start').fontSize(25).fontWeight(FontWeight.Bold)
      }.margin({ top: 20 })
      .onClick(() => {
Z
zengyawen 已提交
171 172
        console.info(getInspectorByKey("click"))
        console.info(getInspectorTree())
173
        this.text = "Button 'click to start' is clicked"
Z
zengyawen 已提交
174
        setTimeout(() => {
M
match 已提交
175
          sendEventByKey("longClick", 11, "") // 向id为"longClick"的组件发送长按事件
Z
zengyawen 已提交
176 177 178 179
        }, 2000)
      }).id('click')

      Button() {
180
        Text('longClick').fontSize(25).fontWeight(FontWeight.Bold)
181
      }.margin({ top: 20 }).backgroundColor('#0D9FFB')
Z
zengyawen 已提交
182
      .gesture(
183 184
      LongPressGesture().onActionEnd(() => {
        console.info('long clicked')
185
        this.text = "Button 'longClick' is longclicked"
186
        setTimeout(() => {
M
match 已提交
187
          let rect = Utils.getComponentRect('onTouch') // 获取id为"onTouch"组件的矩形区域坐标
188 189
          let touchPoint: TouchObject = {
            id: 1,
M
match 已提交
190 191
            x: rect.left + (rect.right - rect.left) / 2, // 组件中心点x坐标
            y: rect.top + (rect.bottom - rect.top) / 2, // 组件中心点y坐标
192
            type: TouchType.Down,
M
match 已提交
193 194
            screenX: rect.left + (rect.right - rect.left) / 2, // 组件中心点x坐标
            screenY: rect.left + (rect.right - rect.left) / 2, // 组件中心点y坐标
195
          }
M
match 已提交
196
          sendTouchEvent(touchPoint) // 发送触摸事件
197
          touchPoint.type = TouchType.Up
M
match 已提交
198
          sendTouchEvent(touchPoint) // 发送触摸事件
199
        }, 2000)
200
      })).id('longClick')
201 202 203 204 205 206 207 208

      Button() {
        Text('onTouch').fontSize(25).fontWeight(FontWeight.Bold)
      }.type(ButtonType.Capsule).margin({ top: 20 })
      .onClick(() => {
        console.info('onTouch is clicked')
        this.text = "Button 'onTouch' is clicked"
        setTimeout(() => {
M
match 已提交
209
          let rect = Utils.getComponentRect('onMouse') // 获取id为"onMouse"组件的矩形区域坐标
210 211 212
          let mouseEvent: MouseEvent = {
            button: MouseButton.Left,
            action: MouseAction.Press,
M
match 已提交
213 214 215 216
            x: rect.left + (rect.right - rect.left) / 2, // 组件中心点x坐标
            y: rect.top + (rect.bottom - rect.top) / 2, // 组件中心点y坐标
            screenX: rect.left + (rect.right - rect.left) / 2, // 组件中心点x坐标
            screenY: rect.top + (rect.bottom - rect.top) / 2, // 组件中心点y坐标
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
            timestamp: 1,
            target: {
              area: {
                width: 1,
                height: 1,
                position: {
                  x: 1,
                  y: 1
                },
                globalPosition: {
                  x: 1,
                  y: 1
                }
              }
            },
            source: SourceType.Mouse
          }
M
match 已提交
234
          sendMouseEvent(mouseEvent) // 发送鼠标事件
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
        }, 2000)
      }).id('onTouch')

      Button() {
        Text('onMouse').fontSize(25).fontWeight(FontWeight.Bold)
      }.margin({ top: 20 }).backgroundColor('#0D9FFB')
      .onMouse(() => {
        console.info('onMouse')
        this.text = "Button 'onMouse' in onMouse"
        setTimeout(() => {
          let keyEvent: KeyEvent = {
            type: KeyType.Down,
            keyCode: 2049,
            keyText: 'tab',
            keySource: 4,
            deviceId: 0,
            metaKey: 0,
            timestamp: 0
          }
M
match 已提交
254
          sendKeyEvent(keyEvent) // 发送按键事件
255 256 257 258
        }, 2000)
      }).id('onMouse')

      Text(this.text).fontSize(25).padding(15)
Z
zengyawen 已提交
259
    }
260
    .width('100%').height('100%')
Z
zengyawen 已提交
261 262 263
  }
}
```