id组件标识

2024-01-22 16:22 更新

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

说明

从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

属性

名称参数说明描述
idstring

组件的唯一标识,唯一性由使用者保证。

默认值:''

从API version 9开始,该接口支持在ArkTS卡片中使用。

接口

getInspectorByKey9+

getInspectorByKey(id: string): string

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

此接口仅用于对应用的测试。

参数:

参数类型必填描述
idstring要获取属性的组件id。

返回值:

类型描述
string组件属性列表的JSON字符串。

getInspectorTree9+

getInspectorTree(): Object

获取组件树及组件属性。

此接口仅用于对应用的测试。

返回值:

类型描述
Object组件树及组件属性列表的JSON对象。

sendEventByKey9+

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

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

此接口仅用于对应用的测试。

参数:

参数类型必填描述
idstring要触发事件的组件的id。
actionnumber

要触发的事件类型,目前支持取值:

- 点击事件Click: 10

- 长按事件LongClick: 11。

paramsstring事件参数,无参数传空字符串 ""。

返回值:

类型描述
boolean找不到指定id的组件时返回false,其余情况返回true。

sendTouchEvent9+

sendTouchEvent(event: TouchObject): boolean

发送触摸事件。

此接口仅用于对应用的测试。

参数:

参数类型必填描述
eventTouchObject触发触摸事件的位置,event参数见TouchEvent中TouchObject的介绍。

返回值:

类型描述
boolean事件发送失败时返回false,其余情况返回true。

sendKeyEvent9+

sendKeyEvent(event: KeyEvent): boolean

发送按键事件。

此接口仅用于对应用的测试。

参数:

参数类型必填描述
eventKeyEvent按键事件,event参数见KeyEvent介绍。

返回值:

类型描述
boolean事件发送失败时时返回false,其余情况返回true。

sendMouseEvent9+

sendMouseEvent(event: MouseEvent): boolean

发送鼠标事件。

此接口仅用于对应用的测试。

参数:

参数类型必填描述
eventMouseEvent鼠标事件,event参数见MouseEvent介绍。

返回值:

类型描述
boolean事件发送失败时返回false,其余情况返回true。

示例

  1. // xxx.ets
  2. class Utils {
  3. static rect_left
  4. static rect_top
  5. static rect_right
  6. static rect_bottom
  7. static rect_value
  8. //获取组件所占矩形区域坐标
  9. static getComponentRect(key) {
  10. let strJson = getInspectorByKey(key)
  11. let obj = JSON.parse(strJson)
  12. console.info("[getInspectorByKey] current component obj is: " + JSON.stringify(obj))
  13. let rectInfo = JSON.parse('[' + obj.$rect + ']')
  14. console.info("[getInspectorByKey] rectInfo is: " + rectInfo)
  15. this.rect_left = JSON.parse('[' + rectInfo[0] + ']')[0]
  16. this.rect_top = JSON.parse('[' + rectInfo[0] + ']')[1]
  17. this.rect_right = JSON.parse('[' + rectInfo[1] + ']')[0]
  18. this.rect_bottom = JSON.parse('[' + rectInfo[1] + ']')[1]
  19. return this.rect_value = {
  20. "left": this.rect_left, "top": this.rect_top, "right": this.rect_right, "bottom": this.rect_bottom
  21. }
  22. }
  23. }
  24. @Entry
  25. @Component
  26. struct IdExample {
  27. @State text: string = ''
  28. build() {
  29. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  30. Button() {
  31. Text('onKeyTab').fontSize(25).fontWeight(FontWeight.Bold)
  32. }.margin({ top: 20 }).backgroundColor('#0D9FFB')
  33. .onKeyEvent(() => {
  34. this.text = "onKeyTab"
  35. })
  36. Button() {
  37. Text('click to start').fontSize(25).fontWeight(FontWeight.Bold)
  38. }.margin({ top: 20 })
  39. .onClick(() => {
  40. console.info(getInspectorByKey("click"))
  41. console.info(JSON.stringify(getInspectorTree()))
  42. this.text = "Button 'click to start' is clicked"
  43. setTimeout(() => {
  44. sendEventByKey("longClick", 11, "") // 向id为"longClick"的组件发送长按事件
  45. }, 2000)
  46. }).id('click')
  47. Button() {
  48. Text('longClick').fontSize(25).fontWeight(FontWeight.Bold)
  49. }.margin({ top: 20 }).backgroundColor('#0D9FFB')
  50. .gesture(
  51. LongPressGesture().onActionEnd(() => {
  52. console.info('long clicked')
  53. this.text = "Button 'longClick' is longclicked"
  54. setTimeout(() => {
  55. let rect = Utils.getComponentRect('onTouch') // 获取id为"onTouch"组件的矩形区域坐标
  56. let touchPoint: TouchObject = {
  57. id: 1,
  58. x: rect.left + (rect.right - rect.left) / 2, // 组件中心点x坐标
  59. y: rect.top + (rect.bottom - rect.top) / 2, // 组件中心点y坐标
  60. type: TouchType.Down,
  61. screenX: rect.left + (rect.right - rect.left) / 2, // 组件中心点x坐标
  62. screenY: rect.left + (rect.right - rect.left) / 2, // 组件中心点y坐标
  63. }
  64. sendTouchEvent(touchPoint) // 发送触摸事件
  65. touchPoint.type = TouchType.Up
  66. sendTouchEvent(touchPoint) // 发送触摸事件
  67. }, 2000)
  68. })).id('longClick')
  69. Button() {
  70. Text('onTouch').fontSize(25).fontWeight(FontWeight.Bold)
  71. }.type(ButtonType.Capsule).margin({ top: 20 })
  72. .onClick(() => {
  73. console.info('onTouch is clicked')
  74. this.text = "Button 'onTouch' is clicked"
  75. setTimeout(() => {
  76. let rect = Utils.getComponentRect('onMouse') // 获取id为"onMouse"组件的矩形区域坐标
  77. let mouseEvent: MouseEvent = {
  78. button: MouseButton.Left,
  79. action: MouseAction.Press,
  80. x: rect.left + (rect.right - rect.left) / 2, // 组件中心点x坐标
  81. y: rect.top + (rect.bottom - rect.top) / 2, // 组件中心点y坐标
  82. screenX: rect.left + (rect.right - rect.left) / 2, // 组件中心点x坐标
  83. screenY: rect.top + (rect.bottom - rect.top) / 2, // 组件中心点y坐标
  84. timestamp: 1,
  85. target: {
  86. area: {
  87. width: 1,
  88. height: 1,
  89. position: {
  90. x: 1,
  91. y: 1
  92. },
  93. globalPosition: {
  94. x: 1,
  95. y: 1
  96. }
  97. }
  98. },
  99. source: SourceType.Mouse,
  100. pressure: 1,
  101. tiltX: 1,
  102. tiltY: 1,
  103. sourceTool: SourceTool.Unknown
  104. }
  105. sendMouseEvent(mouseEvent) // 发送鼠标事件
  106. }, 2000)
  107. }).id('onTouch')
  108. Button() {
  109. Text('onMouse').fontSize(25).fontWeight(FontWeight.Bold)
  110. }.margin({ top: 20 }).backgroundColor('#0D9FFB')
  111. .onMouse(() => {
  112. console.info('onMouse')
  113. this.text = "Button 'onMouse' in onMouse"
  114. setTimeout(() => {
  115. let keyEvent: KeyEvent = {
  116. type: KeyType.Down,
  117. keyCode: 2049,
  118. keyText: 'tab',
  119. keySource: 4,
  120. deviceId: 0,
  121. metaKey: 0,
  122. timestamp: 0
  123. }
  124. sendKeyEvent(keyEvent) // 发送按键事件
  125. }, 2000)
  126. }).id('onMouse')
  127. Text(this.text).fontSize(25).padding(15)
  128. }
  129. .width('100%').height('100%')
  130. }
  131. }
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号