【HarmonyOS Next】鸿蒙监听手机按键

ops/2025/2/21 7:29:50/

【HarmonyOS Next】鸿蒙监听手机按键

一、前言

应用开发中我们会遇到监听用户实体按键,或者扩展按键的需求。亦或者是在某些场景下,禁止用户按下某些按键的业务需求。

这两种需求,鸿蒙都提供了对应的监听事件进行处理。
onKeyEvent 默认的按钮监听事件

onKeyPreIme 这是优先级最高的监听回调,别上面多了一个return开关,用于告诉系统监听事件是否再向下传递。
在这里插入图片描述
窗口是第一级接收按钮事件的实体。后续会传递给后三级。

二、解决方案参考

我们以音量实体按键举例,
通过绑定onKeyEvent按键监听来获取按键事件的回调。需要注意的是,绑定了按键事件需要控件获得焦点时,用户去操作按键才会有监听回调。

		// 给控件添加默认聚焦.defaultFocus(true)// 给Button设置onKeyEvent事件.onKeyEvent((event?: KeyEvent) => {})

使用onKeyPreIme屏蔽音量使用下键。

import { KeyCode } from '@kit.InputKit';

struct PreImeEventExample {build() {Column() {Search({placeholder: "Search..."}).width("80%").height("40vp").border({ radius:"20vp" }).onKeyPreIme((event:KeyEvent) => {// 屏蔽音量使用下键if (event.keyCode == KeyCode.KEYCODE_VOLUME_DOWN) {return true;}return false;})}}
}

三、DEMO源码示例:

import { KeyCode } from '@kit.InputKit'

struct KeyClickTestPage { text: string = '' eventType: string = ''build() {Column() {Button('KeyEvent').defaultFocus(true)// 给Button设置onKeyEvent事件.onKeyEvent((event?: KeyEvent) => {if(event){if (event.type === KeyType.Down) {this.eventType = 'Down' // 按钮 按下}if (event.type === KeyType.Up) {this.eventType = 'Up'// 按钮 抬起}// KEYCODE_VOLUME_UP	16	音量增加键// KEYCODE_VOLUME_DOWN	17	音量减小键// KEYCODE_POWER	18	电源键this.text = 'onKeyEvent KeyType:' + this.eventType + '\nkeyCode:' + event.keyCode + '\nkeyText:' + event.keyText + '\nintentionCode:' + event.intentionCode}}).onKeyPreIme((event:KeyEvent) => {// 屏蔽音量使用下键if (event.keyCode == KeyCode.KEYCODE_VOLUME_DOWN) {return true;}this.text = 'onKeyPreIme KeyType:' + this.eventType + '\nkeyCode:' + event.keyCode + '\nkeyText:' + event.keyText + '\nintentionCode:' + event.intentionCodereturn false;})Text(this.text).padding(15)}.height(300).width('100%').padding(35)}
}

扩展资料

点击跳转参考按键Code列表:
在这里插入图片描述


http://www.ppmy.cn/ops/160184.html

相关文章

当滑动组件连续触发回调函数的三种解决办法

1. 节流(Throttle) 节流是一种限制函数调用频率的技术,它会在一定时间内只允许函数执行一次。在滑动组件中使用节流可以避免短时间内的连续触发。 Entry Component struct ThrottleSlideExample {// 节流时间间隔,单位为毫秒pri…

Git安装

一、下载安装包 连接 二、详细安装 三、环境配置 1. 设置 Git 全局用户名和邮箱 git config --global user.name "gitxiewei" git config --global user.email "returnxw163.com" 2. 验证配置 git config --global --list 3. 设置别名 在4在文件夹中找…

推荐一个github star45k+进阶的java项目及知识的网站

mall是github上star 45k的一个java项目 mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBootMyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心…

C/C++面试知识点总结

目录 1. 指针1.1 智能指针1.2 指针和引用的区别1.3 数组和指针的区别1.4 数组指针和指针数组的区别1.5 迭代器和指针的区别1.6 strcpy 和 memcpy 的区别 2. 内存管理与分配2.1 内存分配与存储区2.2 malloc / free2.3 volatile和extern的区别2.4 拷贝构造函数2.5 预处理、编译、…

接口测试-API测试中常用的协议(中)

一、SOAP SOAP(Simple Object Access Protocol)即简单对象访问协议,是一种基于 XML 的用于在网络中交换结构化信息的协议,常用于 Web 服务之间的通信。以下为你详细介绍: 产生背景 在互联网发展过程中,需…

析言GBI:用自然语言交互重构企业数据分析范式

亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、Java 与 Python 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来…

银河麒麟系统安装mysql5.7【亲测可行】

一、安装环境 cpu:I5-10代; 主板:华硕; OS:银河麒麟V10(SP1)未激活 架构:Linux 5.10.0-9-generic x86_64 GNU/Linux mysql版本:mysql-5.7.34-linux-glibc2.12-x86_64.ta…

工控自动化领域:数字量信号与模拟量信号的差异解析

在工控自动化的神秘世界里,信号如同传递指令和信息的使者,而数字量信号和模拟量信号则是其中的两大主角。它们各自有着独特的 “性格” 和 “使命”,在不同的场景中发挥着关键作用。下面,就让我们一起来深入了解一下它们的区别。 …