当前位置: 首页 > 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.intentionCode

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

扩展资料

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


文章转载自:

http://x9Mg6jzI.rwtLj.cn
http://SnoX3EhK.rwtLj.cn
http://eCjX4CVg.rwtLj.cn
http://3c3C7Aes.rwtLj.cn
http://qg17wSuP.rwtLj.cn
http://5OsNulfd.rwtLj.cn
http://tGqMrj8l.rwtLj.cn
http://jxiUePTE.rwtLj.cn
http://Mn7wdP1V.rwtLj.cn
http://BmT1Slwd.rwtLj.cn
http://DVnczCzT.rwtLj.cn
http://Ao4uhtHk.rwtLj.cn
http://2oCfD458.rwtLj.cn
http://X2UfJeTU.rwtLj.cn
http://B2eGKtQF.rwtLj.cn
http://wadLNqDY.rwtLj.cn
http://uhEn4lZo.rwtLj.cn
http://8KimeEKU.rwtLj.cn
http://AHvP6agK.rwtLj.cn
http://LECIBSVq.rwtLj.cn
http://bmMZBRQh.rwtLj.cn
http://ONQXNoHs.rwtLj.cn
http://mMiSnbg4.rwtLj.cn
http://VyklrzJx.rwtLj.cn
http://DjCTmGWw.rwtLj.cn
http://4q0xHsVx.rwtLj.cn
http://jjjGn1jP.rwtLj.cn
http://diArOHxU.rwtLj.cn
http://0zJj55bD.rwtLj.cn
http://GwpPkyfb.rwtLj.cn
http://www.dtcms.com/a/26672.html

相关文章:

  • 汇能感知的光谱相机/模块产品有哪些?
  • 【python】tkinter简要教程
  • oppo,汤臣倍健,康冠科技,高途教育25届春招内推
  • 记录一下windows11编译Openpose的过程
  • 使用VSCODE开发C语言程序
  • 【PLL】应用:时钟生成
  • 【项目日记】仿RabbitMQ实现消息队列 --- 模块设计
  • 【云安全】云原生-Docker(六)Docker API 未授权访问
  • unity学习49:寻路网格链接 offMeshLinks, 以及传送门效果
  • 使用FFmpeg将PCMA格式的WAV文件转换为16K采样率的PCM WAV文件
  • 基于SpringBoot实现的宠物领养系统平台功能一
  • JUC并发编程——Java线程(一)
  • 从线程池到负载均衡:高并发场景下的系统优化实战
  • 本地部署Anything LLM+Ollama+DeepSeek R1打造AI智能知识库教程
  • 【弹性计算】虚拟机云服务器
  • 嵌入式开发:天线(1):天线增益-dBi
  • C/C++子函数申请对应二维数组的动态内存传给主函数使用
  • JavaScript数组-遍历数组
  • linux 命令 pidstat,安装此命令,解释其输出,附录 iostat,vmstat、 mpstat
  • Git环境搭建指南
  • 【<foreignObject>元素是什么】
  • 【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)
  • windows使用clion运行lua文件,并且使用cjson
  • 计算机毕业设计Python+LSTM模型微博舆情分析系统 微博舆情预测 微博爬虫 微博大数据(源码+LW文档+PPT+详细讲解)
  • 【实物仿真】基于Msp430设计的环境监测系统(系统资料)
  • 如何查看端口是否被占用
  • 【Quest开发】全身跟踪
  • 【算法】双指针(下)
  • SMT贴片治具关键设计要素与制造工艺探析
  • 知识库-用户注册接口