【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.intentionCode

          return false;
        })
      Text(this.text).padding(15)
    }.height(300).width('100%').padding(35)
  }
}

扩展资料

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud-Eureka初步使用

什么是REST是一组用于规范资源在网络中转移的表现形式软件架构设计风格.简单来说就是客户端和服务器之间的一种交互形式 什么是RESTful,满足了REST风格的接口或者程序,RESTful API是其中的接口,spring中提供了RestTemplate这个类,他强制执行了REST的规范,包括使用HTTP协议的状…

SpringBoot+uniApp日历备忘录小程序系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.日历渲染代码:2.保存备忘录代码:3.删除备忘录代码: 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootuniApp框架开…

推荐给 Easysearch 新用户的几个 Elasticsearch 可视化工具

Easysearch 作为国产化的 Elasticsearch(ES)替代方案,兼容 Elasticsearch 生态系统中的多种工具。本文将介绍几款适合 Easysearch 用户的可视化工具,帮助您更高效地管理和查询数据。 1. Elasticsearch Head 插件 在ES培训经常提…

PHP+Apache+MySQL安装(Windows)

一、安装教程 参考链接1 参考链接2 二、问题描述 PHP安装目录下找不到php8apache2_4.dll PHP安装包下载错误 Apache Service Monitor: request operation has failed! 定位问题: 查看【事件查看器】 解决问题 安装或更新与PHP版本相对应的Visual C Redistribu…

捷米特 JM - RTU - TCP 网关应用 F - net 协议转 Modbus TCP 实现电脑控制流量计

一、项目背景 在某工业生产园区的供水系统中,为了精确监测和控制各个生产环节的用水流量,需要对分布在不同区域的多个流量计进行集中管理。这些流量计原本采用 F - net 协议进行数据传输,但园区的监控系统基于 Modbus TCP 协议进行数据交互&…

【Mysql】我在广州学Mysql 系列—— 有关日志管理的示例

ℹ️大家好,我是练小杰,今天星期四了,明天周五,美好的周末又要到了!!😆 本文是对MySQL日志管理内容进行练习,后续将添加更多相关知识噢,谢谢各位的支持🙏 复习…

JUC并发—8.并发安全集合二

大纲 1.JDK 1.7的HashMap的死循环与数据丢失 2.ConcurrentHashMap的并发安全 3.ConcurrentHashMap的设计介绍 4.ConcurrentHashMap的put操作流程 5.ConcurrentHashMap的Node数组初始化 6.ConcurrentHashMap对Hash冲突的处理 7.ConcurrentHashMap的并发扩容机制 8.Concu…

金融时间序列【量化理论】

业界常用的技术分析指标都与价格本身有关,而时间序列分析由于对数据平稳性的要求常常是基于收益率这样更加偏稳定的数据(收益率由于会涨停和跌停每天最多10%) 平稳性: 强平稳性:随时间变化,各个统计特征都…

nvm安装、管理node多版本以及配置环境变量【保姆级教程】

引言 不同的项目运行时可能需要不同的node版本才可以运行,由于来回进行卸载不同版本的node比较麻烦;所以需要使用node工程多版本管理。 本人在配置时,通过网络搜索教程,由于文章时间过老,或者文章的互相拷贝导致配置时…

8 SpringBootWeb案例(上): 查询【分页功能(分页插件)】、删除、新增、修改

文章目录 前言:SpringBootWeb案例1. 准备工作1.1 需求&环境搭建1.1.1 需求说明1.1.2 环境搭建1.2 开发规范1.2.1 开发规范-REST(不强求非要这种风格,传统风格有时候更方便)1.2.2 开发规范-统一响应结果和异常处理1.2.3 开发流程2. 部门管理2.1 查询部门2.1.1 原型和需求…

新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)

视频教程和更多福利在我主页简介或专栏里 (不懂都可以来问我 专栏找我哦) 如果对你有帮助你可以来专栏找我,我可以无偿分享给你对你更有帮助的一些经验和资料哦 目录: 一、XSS的三种类型: 二、XSS攻击的危害&#x…

用《软件方法》引导AI全流程高效开发

和“敏捷”的拍脑袋“试错”不同,《软件方法》一直强调严谨地思考、推导和建模。 如何尽量借助现有AI的力量,降低建模人员A→B→C→D的推导工作量,是一个非常有价值的课题。我们将用一个实例来分享和展示《软件方法》作者潘加宇的建议实践。…

全面收集中间件Exporter适配:从Redis到ActiveMQ,掌握监控数据采集的最佳实践

#作者:任少近 文章目录 说明:一 Redis的适配exporter版1.1 Redis的exporter源码版本1.2 Redis的exporter的releases版1.3 Redis_exporter版本选择理由1.4 Redis_exporter docer镜像 二 Zookeeper的适配exporter版2.1 Zookeeper的exporter源码版本2.2 Zo…

npm在install时提示要安装python问题处理

使用npm\yarn\pnpm下载以来的时候,一直提示python异常,有的项目安装了python之后,下载依赖还是异常 而且旧版本项目使用python2,新的使用Python3…很烦 解决方案1:cnpm 使用cnpm 安装教程: npm安装cnpm,解…

浅谈网络 | 容器网络之Cilium

目录 Cilium介绍Cilium是什么Cilium 主要功能特性为什么用Cilium? 功能概述组件概况BPF 与 XDPeBPF (Extended Berkeley Packet Filter)XDP (eXpress Data Path) Cilium介绍 Cilium是什么 Cilium 是一个开源网络和安全项目,专为 Kubernetes、Docker 和…

前端知识点---vue的声明周期(vue)

文章目录 创建挂载更新销毁 vue的生命周期有四个阶段: 创建 挂载, 更新和销毁 创建 是vue组件从创建到准备渲染的过程 dom还没挂载到页面中 进行了初始化工作: 初始化数据(data,props) . 设置计算属性computed 初始化方法 methods 绑定事件watch 创建阶段的钩子函数beforeCrea…

MySQL如何解决幻读?

目录 一、什么是幻读? 1.1 幻读的定义 1.2 幻读的示例 1.3 幻读产生的原因? 1.4?读已提交(Read Committed) 1.4.1 确定事务等级 1.4.2 非锁定读取 准备 示例 结论 1.4.3 锁定读取 准备 示例 分析 结论 1.5?可重…

Day15-后端Web实战-登录认证——会话技术JWT令牌过滤器拦截器

目录 登录认证1. 登录功能1.1 需求1.2 接口文档1.3 思路分析1.4 功能开发1.5 测试 2. 登录校验2.1 问题分析2.2 会话技术2.2.1 会话技术介绍2.2.2 会话跟踪方案2.2.2.1 方案一 - Cookie2.2.2.2 方案二 - Session2.2.2.3 方案三 - 令牌技术 2.3 JWT令牌2.3.1 介绍2.3.2 生成和校…

支持所有模拟器根证书一键植入方便快捷

qq 点-我咨-】--询 群 Android系统中的安全证书分为“用户证书”和“系统证书”两类。用户可以在设备的设置 -> 安全 -> 查看安全证书页面中,分别查看“系统”和“用户”两个独立的证书列表。其中,用户证书通常是通过浏览器下载安装,或…

WinMerge深度解析:开源免费的文件与文件夹比较利器

在文件与文件夹比较工具中,WinMerge凭借其开源免费、功能全面的特点,赢得了广大用户的喜爱。本文将对WinMerge进行深度解析,帮助大家更好地了解这款工具。 一、开源免费,持续更新 WinMerge是一款专为Windows设计的开源免费文件与文件夹比较工具,自2000年诞生以来,至今已…