当前位置: 首页 > news >正文

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

【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.lryc.cn/news/539594.html

相关文章:

  • 用Deepseek查询快证API-物流查询-实名认证-企业实名认证
  • 一个简洁高效的Flask用户管理示例
  • 分布式之分布式ID
  • (萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念
  • 边缘计算网关与 PLC:注塑机车间数据互联新变革
  • LeetCode刷题---哈希表---347
  • LED灯闪烁实验:实验介绍
  • 论文笔记(七十二)Reward Centering(一)
  • C#之上位机开发---------C#通信库及WPF的简单实践
  • 使用 pjsua2 开发呼叫机器人,批量拨打号码并播放固定音频
  • 从函数到神经网络
  • 用自定义注解实现Excel数据导入中的枚举值校验
  • 网络安全技术pat实验 网络安全 实验
  • 4、IP查找工具-Angry IP Scanner
  • 1018. 锤子剪刀布 (20)-PAT乙级真题
  • MyBatis 中 SqlMapConfig 配置文件详解
  • 复杂项目中的多级WBS应该如何分解?
  • 红蓝对抗之常见网络安全事件研判、了解网络安全设备、Webshell入侵检测
  • 使用 CodeMirror 6 实现插入文本及替换选中文本功能
  • Huatuo热更新--如何使用
  • Flask实现高效日志记录模块
  • scroll、offset、client三大家族和getBoundingClientRect方法
  • JWT 令牌
  • Python基于Flask的豆瓣Top250电影数据可视化分析与评分预测系统(附源码,技术说明)
  • JavaScript数组-遍历数组
  • 基于Flask的第七次人口普查数据分析系统的设计与实现
  • 解决DeepSeek服务器繁忙的有效方法
  • 分词器(Tokenizer) | 有了分词器,为什么还需要嵌入模型
  • VisionTransformer(ViT)与CNN卷积神经网络的对比
  • 计算机视觉+Numpy和OpenCV入门