鸿蒙5.0开辟进阶:API ArkUI框架-ArkTS组件(组件标识)

打印 上一主题 下一主题

主题 934|帖子 934|积分 2802

往期鸿蒙全套实战文章必看:(文中附带全栈鸿蒙学习资料)



  • 鸿蒙开辟核心知识点,看这篇文章就够了
  • 最新版!鸿蒙HarmonyOS Next应用开辟实战学习门路
  • 鸿蒙HarmonyOS NEXT开辟技术最全学习门路指南
  • 鸿蒙应用开辟实战项目,看这一篇文章就够了(部分项目附源码)

组件标识

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

  • 从API Version 8开始支持。后续版本如有新增内容,则采取上角标单独标志该内容的起始版本。
  • 若同一个组件设置了多个id或者key,最后设置的生效。
  属性

id

id(value: string): T
组件的唯一标识,唯一性由利用者保证。
卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中利用。
元服务API: 从API version 11开始,该接口支持在元服务中利用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
名称范例必填阐明valuestring是 组件的唯一标识,唯一性由利用者保证。
默认值:''
  key12+

key(value: string): T
组件的唯一标识,唯一性由利用者保证。
此接口仅用于对应用的测试。与id同时利用时,后赋值的属性会覆盖先赋值的属性,建议仅设置id。
系统能力: SystemCapability.ArkUI.ArkUI.Full
参数:
名称范例必填阐明valuestring是 组件的唯一标识,唯一性由利用者保证。
默认值:''
  接口

getInspectorByKey9+

getInspectorByKey(id: string): string
获取指定id的组件的所有属性,不包罗子组件信息。
此接口仅用于对应用的测试。由于耗时长,不建议利用。
元服务API: 从API version 11开始,该接口支持在元服务中利用。
参数:
参数名范例必填阐明idstring是要获取属性的组件id。 返回值:
范例阐明string 组件属性列表的JSON字符串。
阐明
字符串信息包含组件的tag、id、位置信息(相对于窗口左上角的坐标)以及用于测试查抄的组件所包含的相关属性信息。
  getInspectorTree9+

getInspectorTree(): Object
获取组件树及组件属性。
此接口仅用于对应用的测试。由于耗时长,不建议利用。
元服务API: 从API version 11开始,该接口支持在元服务中利用。
返回值:
范例阐明Object组件树及组件属性列表的JSON对象。 sendEventByKey9+

sendEventByKey(id: string, action: number, params: string): boolean
给指定id的组件发送事件。
此接口仅用于对应用的测试。由于耗时长,不建议利用。
元服务API: 从API version 11开始,该接口支持在元服务中利用。
参数:
参数名范例必填阐明idstring是要触发事件的组件的id。actionnumber是 要触发的事件范例,现在支持取值:
- 点击事件Click: 10
- 长按事件LongClick: 11。
paramsstring是事件参数,无参数传空字符串 ""。 返回值:
范例阐明boolean找不到指定id的组件时返回false,其余环境返回true。 sendTouchEvent9+

sendTouchEvent(event: TouchObject): boolean
发送触摸事件。
此接口仅用于对应用的测试。由于耗时长,不建议利用。
元服务API: 从API version 11开始,该接口支持在元服务中利用。
参数:
参数名范例必填阐明eventTouchObject是触发触摸事件的位置,event参数见TouchEvent中TouchObject的先容。 返回值:
范例阐明boolean事件发送失败时返回false,其余环境返回true。 sendKeyEvent9+

sendKeyEvent(event: KeyEvent): boolean
发送按键事件。
此接口仅用于对应用的测试。由于耗时长,不建议利用。
元服务API: 从API version 11开始,该接口支持在元服务中利用。
参数:
参数名范例必填阐明eventKeyEvent是按键事件,event参数见KeyEvent先容。 返回值:
范例阐明boolean事件发送失败时时返回false,其余环境返回true。 sendMouseEvent9+

sendMouseEvent(event: MouseEvent): boolean
发送鼠标事件。
此接口仅用于对应用的测试。由于耗时长,不建议利用。
元服务API: 从API version 11开始,该接口支持在元服务中利用。
参数:
参数名范例必填阐明eventMouseEvent是鼠标事件,event参数见MouseEvent先容。 返回值:
范例阐明boolean事件发送失败时返回false,其余环境返回true。 示例

该示例主要展示如何通过组件标识接口,获取特定id组件的属性,以及如何向该id的组件触发事件。
  1. // xxx.ets
  2. import { IntentionCode } from '@kit.InputKit'
  3. class Utils {
  4.   static rect_left: number
  5.   static rect_top: number
  6.   static rect_right: number
  7.   static rect_bottom: number
  8.   static rect_value: Record<string, number>
  9.   //获取组件所占矩形区域坐标
  10.   static getComponentRect(key:string):Record<string, number> {
  11.     let strJson = getInspectorByKey(key)
  12.     let obj:Record<string, string> = JSON.parse(strJson)
  13.     console.info("[getInspectorByKey] current component obj is: " + JSON.stringify(obj))
  14.     let rectInfo:string[] = JSON.parse('[' + obj.$rect + ']')
  15.     console.info("[getInspectorByKey] rectInfo is: " + rectInfo)
  16.     Utils.rect_left = JSON.parse('[' + rectInfo[0] + ']')[0]     // 相对于组件左上角的水平方向坐标
  17.     Utils.rect_top = JSON.parse('[' + rectInfo[0] + ']')[1]      // 相对于组件左上角的垂直方向坐标
  18.     Utils.rect_right = JSON.parse('[' + rectInfo[1] + ']')[0]    // 相对于组件右下角的水平方向坐标
  19.     Utils.rect_bottom = JSON.parse('[' + rectInfo[1] + ']')[1]   // 相对于组件右下角的垂直方向坐标
  20.     return Utils.rect_value = {
  21.       "left": Utils.rect_left, "top": Utils.rect_top, "right": Utils.rect_right, "bottom": Utils.rect_bottom
  22.     }
  23.   }
  24. }
  25. @Entry
  26. @Component
  27. struct IdExample {
  28.   @State text: string = ''
  29.   build() {
  30.     Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  31.       Button() {
  32.         Text('onKeyTab').fontSize(25).fontWeight(FontWeight.Bold)
  33.       }.margin({ top: 20 }).backgroundColor('#0D9FFB')
  34.       .onKeyEvent(() => {
  35.         this.text = "onKeyTab"
  36.       })
  37.       Button() {
  38.         Text('click to start').fontSize(25).fontWeight(FontWeight.Bold)
  39.       }.margin({ top: 20 })
  40.       .onClick(() => {
  41.         console.info(getInspectorByKey("click"))
  42.         console.info(JSON.stringify(getInspectorTree()))
  43.         this.text = "Button 'click to start' is clicked"
  44.         setTimeout(() => {
  45.           sendEventByKey("longClick", 11, "") // 向id为"longClick"的组件发送长按事件
  46.         }, 2000)
  47.       }).id('click')
  48.       Button() {
  49.         Text('longClick').fontSize(25).fontWeight(FontWeight.Bold)
  50.       }.margin({ top: 20 }).backgroundColor('#0D9FFB')
  51.       .gesture(
  52.       LongPressGesture().onActionEnd(() => {
  53.         console.info('long clicked')
  54.         this.text = "Button 'longClick' is longclicked"
  55.         setTimeout(() => {
  56.           let rect = Utils.getComponentRect('onTouch') // 获取id为"onTouch"组件的矩形区域坐标
  57.           let touchPoint: TouchObject = {
  58.             id: 1,
  59.             type: TouchType.Down,
  60.             x: rect.left + (rect.right - rect.left) / 2, // 相对于组件左上角的水平方向坐标
  61.             y: rect.top + (rect.bottom - rect.top) / 2, // 相对于组件左上角的垂直方向坐标
  62.             screenX: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的水平方向坐标,API10已废弃,采用windowX替代
  63.             screenY: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的垂直方向坐标,API10已废弃,采用windowY替代
  64.             windowX: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的水平方向坐标
  65.             windowY: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的垂直方向坐标
  66.             displayX: rect.left + (rect.right - rect.left) / 2, // 相对于设备屏幕左上角的水平方向坐标
  67.             displayY: rect.left + (rect.right - rect.left) / 2, // 相对于设备屏幕左上角的垂直方向坐标
  68.           }
  69.           sendTouchEvent(touchPoint) // 发送触摸事件
  70.           touchPoint.type = TouchType.Up
  71.           sendTouchEvent(touchPoint) // 发送触摸事件
  72.         }, 2000)
  73.       })).id('longClick')
  74.       Button() {
  75.         Text('onTouch').fontSize(25).fontWeight(FontWeight.Bold)
  76.       }.type(ButtonType.Capsule).margin({ top: 20 })
  77.       .onClick(() => {
  78.         console.info('onTouch is clicked')
  79.         this.text = "Button 'onTouch' is clicked"
  80.         setTimeout(() => {
  81.           let rect = Utils.getComponentRect('onMouse') // 获取id为"onMouse"组件的矩形区域坐标
  82.           let mouseEvent: MouseEvent = {
  83.             button: MouseButton.Left,
  84.             action: MouseAction.Press,
  85.             x: rect.left + (rect.right - rect.left) / 2, // 相对于组件左上角的水平方向坐标
  86.             y: rect.top + (rect.bottom - rect.top) / 2, // 相对于组件左上角的垂直方向坐标
  87.             screenX: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的水平方向坐标,API10已废弃,采用windowX替代
  88.             screenY: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的垂直方向坐标,API10已废弃,采用windowY替代
  89.             windowX: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的水平方向坐标
  90.             windowY: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的垂直方向坐标
  91.             displayX: rect.left + (rect.right - rect.left) / 2, // 相对于设备屏幕左上角的水平方向坐标
  92.             displayY: rect.left + (rect.right - rect.left) / 2, // 相对于设备屏幕左上角的垂直方向坐标
  93.             stopPropagation: () => {
  94.             },
  95.             timestamp: 1,
  96.             target: {
  97.               area: {
  98.                 width: 1,
  99.                 height: 1,
  100.                 position: {
  101.                   x: 1,
  102.                   y: 1
  103.                 },
  104.                 globalPosition: {
  105.                   x: 1,
  106.                   y: 1
  107.                 }
  108.               }
  109.             },
  110.             source: SourceType.Mouse,
  111.             pressure: 1,
  112.             tiltX: 1,
  113.             tiltY: 1,
  114.             sourceTool: SourceTool.Unknown
  115.           }
  116.           sendMouseEvent(mouseEvent) // 发送鼠标事件
  117.         }, 2000)
  118.       }).id('onTouch')
  119.       Button() {
  120.         Text('onMouse').fontSize(25).fontWeight(FontWeight.Bold)
  121.       }.margin({ top: 20 }).backgroundColor('#0D9FFB')
  122.       .onMouse(() => {
  123.         console.info('onMouse')
  124.         this.text = "Button 'onMouse' in onMouse"
  125.         setTimeout(() => {
  126.           let keyEvent: KeyEvent = {
  127.             type: KeyType.Down,
  128.             keyCode: 2049,
  129.             keyText: 'tab',
  130.             keySource: 4,
  131.             deviceId: 0,
  132.             metaKey: 0,
  133.             timestamp: 0,
  134.             stopPropagation: () => {
  135.             },
  136.             intentionCode: IntentionCode.INTENTION_DOWN
  137.           }
  138.           sendKeyEvent(keyEvent) // 发送按键事件
  139.         }, 2000)
  140.       }).id('onMouse')
  141.       Text(this.text).fontSize(25).padding(15)
  142.     }
  143.     .width('100%').height('100%')
  144.   }
  145. }
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表