【鸿蒙软件开发】ArkTS通用事件

本文详细介绍了ArkTS中的点击、触摸和焦点事件,包括事件的基础介绍、ClickEvent和TouchEvent对象的说明,以及示例代码,帮助开发者提升组件交互体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在我们的ArkTS中有一些通用的事件,他们在所有的组件中都可以用,所以我们需要来学习一下。
获得更好的开发体验和效率!!!


一、点击事件

1.1 基础介绍

组件被点击时触发的事件。

名称支持冒泡功能描述
onClick(event: (event?: ClickEvent) => void)点击动作触发该回调,event返回值见ClickEvent对象说明。从API version 9开始,该接口支持在ArkTS卡片中使用。

1.2 ClickEvent对象说明

名称类型描述
screenXnumber点击位置相对于应用窗口左上角的X坐标。
screenYnumber点击位置相对于应用窗口左上角的Y坐标。
xnumber点击位置相对于被点击元素左上角的X坐标。
ynumber点击位置相对于被点击元素左上角的Y坐标。
timestampnumber
事件时间戳。触发事件时距离系统启动的时间间隔,单位纳秒。
targetEventTarget触发事件的元素对象显示区域。
sourceSourceType事件输入设备。

1.3 示例代码

// xxx.ets
@Entry
@Component
struct ClickExample {
  @State text: string = ''

  build() {
    Column() {
      Row({ space: 20 }) {
        Button('Click').width(100).height(40)
          .onClick((event: ClickEvent) => {
            this.text = 'Click Point:' + '\n  screenX:' + event.screenX + '\n  screenY:' + event.screenY
            + '\n  x:' + event.x + '\n  y:' + event.y + '\ntarget:' + '\n  component globalPos:('
            + event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\n  width:'
            + event.target.area.width + '\n  height:' + event.target.area.height + '\ntimestamp' + event.timestamp;
          })
        Button('Click').width(200).height(50)
          .onClick((event: ClickEvent) => {
            this.text = 'Click Point:' + '\n  screenX:' + event.screenX + '\n  screenY:' + event.screenY
            + '\n  x:' + event.x + '\n  y:' + event.y + '\ntarget:' + '\n  component globalPos:('
            + event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\n  width:'
            + event.target.area.width + '\n  height:' + event.target.area.height + '\ntimestamp' + event.timestamp;
          })
      }.margin(20)

      Text(this.text).margin(15)
    }.width('100%')
  }
}

在这里插入图片描述

二、触摸事件

2.1 基础介绍

组件被点击时触发的事件。

名称支持冒泡功能描述
onTouch(event: (event?: TouchEvent) => void)手指触摸动作触发该回调,event返回值见TouchEvent介绍。

2.2 ClickEvent对象说明

名称类型描述
typeTouchType触摸事件的类型。
touchesArray<TouchObject>全部手指信息。
changedTouchesArray<TouchObject>当前发生变化的手指信息。
stopPropagation() => void阻塞事件冒泡。
timestampnumber
事件时间戳。触发事件时距离系统启动的时间间隔,单位纳秒。
targetEventTarget触发事件的元素对象显示区域。
sourceSourceType事件输入设备。

2.3 示例代码

// xxx.ets
@Entry
@Component
struct TouchExample {
  @State text: string = ''
  @State eventType: string = ''

  build() {
    Column() {
      Button('Touch').height(40).width(100)
        .onTouch((event: TouchEvent) => {
          if (event.type === TouchType.Down) {
            this.eventType = 'Down'
          }
          if (event.type === TouchType.Up) {
            this.eventType = 'Up'
          }
          if (event.type === TouchType.Move) {
            this.eventType = 'Move'
          }
          this.text = 'TouchType:' + this.eventType + '\nDistance between touch point and touch element:\nx: '
          + event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\nComponent globalPos:('
          + event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\nwidth:'
          + event.target.area.width + '\nheight:' + event.target.area.height
        })
      Button('Touch').height(50).width(200).margin(20)
        .onTouch((event: TouchEvent) => {
          if (event.type === TouchType.Down) {
            this.eventType = 'Down'
          }
          if (event.type === TouchType.Up) {
            this.eventType = 'Up'
          }
          if (event.type === TouchType.Move) {
            this.eventType = 'Move'
          }
          this.text = 'TouchType:' + this.eventType + '\nDistance between touch point and touch element:\nx: '
          + event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\nComponent globalPos:('
          + event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\nwidth:'
          + event.target.area.width + '\nheight:' + event.target.area.height
        })
      Text(this.text)
    }.width('100%').padding(30)
  }
}

在这里插入图片描述

二、焦点事件

2.2 基础介绍

焦点事件指页面焦点在可获焦组件间移动时触发的事件,组件可使用焦点事件来处理相关逻辑。

名称支持冒泡功能描述
onFocus(event: () => void)当前组件获取焦点时触发的回调。
onBlur(event:() => void)当前组件失去焦点时触发的回调。

3.2 示例代码

// xxx.ets
@Entry
@Component
struct FocusEventExample {
  @State oneButtonColor: string = '#FFC0CB'
  @State twoButtonColor: string = '#87CEFA'
  @State threeButtonColor: string = '#90EE90'

  build() {
    Column({ space: 20 }) {
      // 通过外接键盘的上下键可以让焦点在三个按钮间移动,按钮获焦时颜色变化,失焦时变回原背景色
      Button('First Button')
        .backgroundColor(this.oneButtonColor)
        .width(260)
        .height(70)
        .fontColor(Color.Black)
        .focusable(true)
        .onFocus(() => {
          this.oneButtonColor = '#FF0000'
        })
        .onBlur(() => {
          this.oneButtonColor = '#FFC0CB'
        })
      Button('Second Button')
        .backgroundColor(this.twoButtonColor)
        .width(260)
        .height(70)
        .fontColor(Color.Black)
        .focusable(true)
        .onFocus(() => {
          this.twoButtonColor = '#FF0000'
        })
        .onBlur(() => {
          this.twoButtonColor = '#87CEFA'
        })
      Button('Third Button')
        .backgroundColor(this.threeButtonColor)
        .width(260)
        .height(70)
        .fontColor(Color.Black)
        .focusable(true)
        .onFocus(() => {
          this.threeButtonColor = '#FF0000'
        })
        .onBlur(() => {
          this.threeButtonColor = '#90EE90'
        })
    }.width('100%').margin({ top: 20 })
  }
}

在这里插入图片描述


总结

以上就是今天要讲的内容,本文仅仅简单介绍了点击、触摸、焦点事件,而ArkTS还提供了其他函数,有兴趣地可以自行去看官方文档

### OpenHarmony轻量设备开发理论与实践 OpenHarmony 是一款开源的分布式操作系统,旨在支持多种硬件平台和应用场景。对于轻量设备而言,其开发涉及资源受限环境下的系统裁剪、模块化设计以及高效的通信机制。以下是关于 OpenHarmony 轻量设备开发的相关理论与实践内容: #### 1. **轻量设备概述** 轻量设备通常指资源有限的小型嵌入式设备,例如传感器节点、智能家居控制器等。这些设备的特点是内存容量较小、计算能力较低,因此需要一种高效的操作系统来满足功能需求的同时降低资源消耗。 在 OpenHarmony 中,轻量系统的实现主要依赖于 LiteOS-A 和 LiteOS-M 内核[^2]。LiteOS-M 面向极低功耗、极小尺寸的 IoT 设备;而 LiteOS-A 则适用于更高性能的需求场景,如摄像头或可穿戴设备。 #### 2. **开发环境准备** 要进行 OpenHarmony 轻量设备的应用开发,需先配置好开发环境。这包括安装必要的软件工具链,如 DevEco Device Tool 或其他兼容工具。具体步骤如下: - 下载并安装最新的 SDK 版本。 - 设置交叉编译器路径以便针对目标硬件生成二进制文件。 - 使用模拟器测试代码逻辑或者连接物理板卡验证最终效果。 ```bash # 安装npm包以初始化项目 npm install @ohos/cli -g ``` 上述命令用于全局范围内设置 CLI 工具,便于后续操作自动化脚本执行。 #### 3. **关键技术点解析** ##### (a) **内核定制** 由于每种类型的终端可能具备不同的特性组合(CPU架构/外设接口),所以必须根据实际情况调整源码中的默认参数设定值。比如修改 `los_config.h` 文件定义最大任务数限制或是启用特定驱动程序加载选项等等。 ##### (b) **组件选取** 考虑到存储空间宝贵,在构建镜像之前应该仔细挑选哪些服务会被包含进来。通过 HAL 层抽象出来的通用 API 接口可以方便地切换底层实现方式而不影响上层业务流程。 ##### (c) **安全加固措施** 即使是在简单装置上面也不能忽视信息安全的重要性。可以通过加密传输协议保障敏感数据交换过程的安全性;另外还可以利用沙箱技术隔离不同应用程序之间的相互干扰风险。 #### 4. **实例教程推荐** 如果希望更直观地理解整个流程,则可以从一些公开可用的教学资料入手学习。例如,“mmcalculator项目实战” 就是一个很好的起点,该项目展示了如何运用 ArkTS 编写跨平台界面控件,并将其部署到搭载 HarmonyOS 的小型屏幕上运行展示基本运算结果[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人才程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值