鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:组件标识)

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

说明:

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

属性

名称参数说明描述
idstring组件的唯一标识,唯一性由使用者保证。
默认值:''
从API version 9开始,该接口支持在ArkTS卡片中使用。

接口

getInspectorByKey9+

getInspectorByKey(id: string): string

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

此接口仅用于对应用的测试。由于耗时长,不建议使用。

参数:

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

返回值:

类型描述
string组件属性列表的JSON字符串。
说明
字符串信息包含组件的tag、id、位置信息(相对于窗口左上角的坐标)以及用于测试检查的组件所包含的相关属性信息。

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。

示例

// xxx.ets
import { IntentionCode } from '@ohos.multimodalInput.intentionCode'class Utils {static rect_left: numberstatic rect_top: numberstatic rect_right: numberstatic rect_bottom: numberstatic rect_value: Record<string, number>//获取组件所占矩形区域坐标static getComponentRect(key:string):Record<string, number> {let strJson = getInspectorByKey(key)let obj:Record<string, string> = JSON.parse(strJson)console.info("[getInspectorByKey] current component obj is: " + JSON.stringify(obj))let rectInfo:string[] = JSON.parse('[' + obj.$rect + ']')console.info("[getInspectorByKey] rectInfo is: " + rectInfo)Utils.rect_left = JSON.parse('[' + rectInfo[0] + ']')[0]Utils.rect_top = JSON.parse('[' + rectInfo[0] + ']')[1]Utils.rect_right = JSON.parse('[' + rectInfo[1] + ']')[0]Utils.rect_bottom = JSON.parse('[' + rectInfo[1] + ']')[1]return Utils.rect_value = {"left": Utils.rect_left, "top": Utils.rect_top, "right": Utils.rect_right, "bottom": Utils.rect_bottom}}
}@Entry
@Component
struct IdExample {@State text: string = ''build() {Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {Button() {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(() => {console.info(getInspectorByKey("click"))console.info(JSON.stringify(getInspectorTree()))this.text = "Button 'click to start' is clicked"setTimeout(() => {sendEventByKey("longClick", 11, "") // 向id为"longClick"的组件发送长按事件}, 2000)}).id('click')Button() {Text('longClick').fontSize(25).fontWeight(FontWeight.Bold)}.margin({ top: 20 }).backgroundColor('#0D9FFB').gesture(LongPressGesture().onActionEnd(() => {console.info('long clicked')this.text = "Button 'longClick' is longclicked"setTimeout(() => {let rect = Utils.getComponentRect('onTouch') // 获取id为"onTouch"组件的矩形区域坐标let touchPoint: TouchObject = {id: 1,type: TouchType.Down,x: rect.left + (rect.right - rect.left) / 2, // 相对于组件左上角的水平方向坐标y: rect.top + (rect.bottom - rect.top) / 2, // 相对于组件左上角的垂直方向坐标screenX: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的水平方向坐标,API10已废弃,采用windowX替代screenY: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的垂直方向坐标,API10已废弃,采用windowY替代windowX: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的水平方向坐标windowY: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的垂直方向坐标displayX: rect.left + (rect.right - rect.left) / 2, // 相对于设备屏幕左上角的水平方向坐标displayY: rect.left + (rect.right - rect.left) / 2, // 相对于设备屏幕左上角的垂直方向坐标}sendTouchEvent(touchPoint) // 发送触摸事件touchPoint.type = TouchType.UpsendTouchEvent(touchPoint) // 发送触摸事件}, 2000)})).id('longClick')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(() => {let rect = Utils.getComponentRect('onMouse') // 获取id为"onMouse"组件的矩形区域坐标let mouseEvent: MouseEvent = {button: MouseButton.Left,action: MouseAction.Press,x: rect.left + (rect.right - rect.left) / 2, // 相对于组件左上角的水平方向坐标y: rect.top + (rect.bottom - rect.top) / 2, // 相对于组件左上角的垂直方向坐标screenX: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的水平方向坐标,API10已废弃,采用windowX替代screenY: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的垂直方向坐标,API10已废弃,采用windowY替代windowX: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的水平方向坐标windowY: rect.left + (rect.right - rect.left) / 2, // 相对于应用窗口左上角的垂直方向坐标displayX: rect.left + (rect.right - rect.left) / 2, // 相对于设备屏幕左上角的水平方向坐标displayY: rect.left + (rect.right - rect.left) / 2, // 相对于设备屏幕左上角的垂直方向坐标stopPropagation: () => {},timestamp: 1,target: {area: {width: 1,height: 1,position: {x: 1,y: 1},globalPosition: {x: 1,y: 1}}},source: SourceType.Mouse,pressure: 1,tiltX: 1,tiltY: 1,sourceTool: SourceTool.Unknown}sendMouseEvent(mouseEvent) // 发送鼠标事件}, 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,stopPropagation: () => {},intentionCode: IntentionCode.INTENTION_DOWN}sendKeyEvent(keyEvent) // 发送按键事件}, 2000)}).id('onMouse')Text(this.text).fontSize(25).padding(15)}.width('100%').height('100%')}
}

最后,有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(Harmony NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(Harmony NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

 获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(Harmony NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/722185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第九天

28. 实现 strStr() &#xff08;本题可以跳过&#xff09; 方法&#xff1a; 方法一&#xff1a; 暴力法 i 表示最多能移动到n-m位置&#xff0c; 超过则退出循环。j表示haystack 初始位置k表示needle的初始位置如果haystack [j] needle[k]且 k<m 则 j, k; 如果 km 则返…

OJ输入问题+准备

写在之前&#xff1a; 发现题目输入是这样的&#xff1a; 我的问题&#xff1a;如何通过空格分割这些输入的字符串并分别保存&#xff01;&#xff01;&#xff08;C语言scanf好解决一点但我选择C....&#xff09; C引入了ostringstream、istringstream、stringstream这三个类…

DevOps中集成自动化测试的具体案例

在DevOps中集成自动化测试的具体案例可以从多个角度进行分析,包括金融行业、分布式系统、大型企业等不同领域的实践。以下是几个具体的案例: 金融行业的DevOps实践:在金融行业中,DevOps被广泛应用于提升软件开发和运营的效率。例如,通过解析后台接口代码日志格式,自动化生…

linuxOPS基础_运维概述,及其泛概念

运维岗位定义 什么是运维&#xff1f; ​ 在技术人员&#xff08;写代码的&#xff09;之间&#xff0c;一致对运维有一个开玩笑的认知&#xff1a;运维就是修电脑的、装网线的、背锅的岗位。 ​ IT运维管理是指为了保障企业IT系统及网络的可用性、安全性、稳定性&#xff0…

SPI总线知识总结

1 SPI的时钟极性CPOL和时钟相位CPHA的设置 1.1 SPI数据传输位数 SPI传输数据过程中总是先发送或接收高字节数据&#xff0c;每个时钟周期接收器或发送器左移一位数据。对于小于16位的数据&#xff0c;在发送前必须左对齐&#xff0c;如果接收的数据小于16位&#xff0c;则采用软…

汽车碰撞与刮伤的实用维修技术,汽车的车身修复与涂装修补教学

一、教程描述 本套汽车维修技术教程&#xff0c;大小7.44G&#xff0c;共有60个文件。 二、教程目录 01-汽车车身修复教程01-安全规则&#xff08;共3课时&#xff09; 02-汽车车身修复教程02-汽车结构&#xff08;共3课时&#xff09; 03-汽车车身修复教程03-汽车修复所使…

为什么Spring Cloud 应用程序中,应用程序的加载配置必须写在bootstrap.yaml这个配置文件中,是在哪里规定的?

在 Spring Cloud 应用程序中&#xff0c;bootstrap.yaml&#xff08;或bootstrap.properties&#xff09;的使用并非强制性的&#xff0c;但它扮演着一个特定的角色&#xff0c;主要是因为 Spring Cloud 的设计和工作流程。 背景和设计 Spring Cloud 构建在 Spring Boot 之上…

鸿蒙 Stage模型-应用组件-配置、UIAbility

前提&#xff1a;基于官网3.1/4.0文档。参考官网文档 基于Android开发体系来进行比较和思考。&#xff08;或有偏颇&#xff0c;自行斟酌&#xff09; 一、概念 可以看到分为运行期、编译器&#xff0c;主要关注UIAbility&#xff08;类似Activity&#xff0c;UI相关&#xff0…

2024年软考-官方最新考试安排出来了,软考新调整,很重要,但也很惹人气愤

官方最新通知&#xff0c;关于2024年度计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试工作计划 笔试改机考后&#xff0c;必然会迎来调整&#xff0c;但有点让人费解。 这次调整变动主要是每年考试的次数调整&#xff0c;很多改为了一年一考&#xff0c;具体…

Claude 3 模型发布,压力来到OpenAI这边了~

Anthropic 发布了 Claude 3 系列&#xff0c;包含了三款模型 各具特色&#xff0c;旨在为用户提供更智能、更快速、更高效的选择&#xff0c;可以说是是迄今为止最快、最强大的人工模型&#xff01; Anthropic 一度是 OpenAI 最强力的竞争对手&#xff01; 随着 Claude3 的发…

云计算 3月5号 (DNS域名解析及部署)

DNS域名解析服务 1.DNS介绍 DNS 是域名系统 (Domain Name System) 的缩写&#xff0c;是因特网的一项核心服务&#xff0c;它作为可以将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便的访问互联网&#xff0c;而不用去记住能够被机器直接读取的IP数串。…

408专业课130+|我的备考经验和复盘

408的四门课任务量多到爆炸&#xff01;但难度不止于此。别忘了大部分选计算机的勇士们&#xff0c;是要考数学的&#xff01;直接起飞。 408数学无疑是王炸王炸&#xff0c;要想上岸就一定要把这两个大头一起拿下&#xff01; 作为一个成功上岸的非计算机专业跨考生&#xf…

CSS全局样式的设置,web开发交流

面试题 HTML 1&#xff0c;html5有哪些新特性&#xff1f; 2&#xff0c;html5移除了那些元素&#xff1f; 3&#xff0c;如何处理HTML5新标签的浏览器兼容问题 戳这里领取完整开源项目&#xff1a;【一线大厂前端面试题解析核心总结学习笔记Web真实项目实战最新讲解视频】…

day58 异常 IO流

异常 1异常处理机制 编译时错误 运行时错误 代码逻辑错误 2异常类结构图 java.lang.Throwable 所有异常的父类 只有它能剖出异常 java.lang.Error: extends Throwable 程序中的硬件严重问题不需要处理 java.lang.Exception extends Throwable 异常 指出要捕获的处理条件 3异常…

深入理解现代JavaScript:从语言特性到应用实践

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 JavaScript作为一门动态、解释性脚本语言&…

网络工程师笔记8

华为VRP系统 设备管理方式 web管理方式 命令行管理方式 修改命令&#xff1a;undo 基础配置命令

INFINI Labs 产品更新 | Easysearch 1.7.1发布

INFINI Labs 产品又更新啦~&#xff0c;包括 Console&#xff0c;Gateway&#xff0c;Agent 1.23.0 和 Easysearch 1.7.1。此次版本重点修复历史遗留 Bug 、网友们提的一些需求等。以下是本次更新的详细说明。 INFINI Console v1.23.0 INFINI Console 是一款非常轻量级的多集…

express+mysql+vue,从零搭建一个商城管理系统9--添加商户

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、新建models/shop.js二、新建routes/shop.js三、修改routes下的index.js四、添加商户总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写service部分 一、新建models/shop.js models/shop.…

PortSwigger 基于dom的漏洞-利用 DOM 破坏来启用 XSS

进入实验随意进入一篇博客 我们可以尝试随意提交一些恶意代码看看会发生什么 很显然我们提交成功了但是我们的恶意代码貌似被过滤了 查看源码发现这里有一个过滤框架 我们打开源码分析 function loadComments(postCommentPath) {let xhr new XMLHttpRequest();xhr.onreadys…

#QT(串口助手-实现)

1.IDE&#xff1a;QTCreator 2.实验 3.记录 &#xff08;1&#xff09;在widget.h中加入必要文件&#xff0c;并且定义一个类指针 &#xff08;2&#xff09;如果有类的成员不知道怎么写&#xff0c;可以通过以下途径搜索 &#xff08;2&#xff09;设置串口数据 void Widget…