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

Android中的KeyEvent详解

介绍

  • 在Android中,KeyEvent 是用来表示按键事件的类,可根据对应的事件来处理按键输入,具体包含了关于按键事件的信息,例如按键的代码、动作(按下或释放)以及事件的时间戳,KeyEvent 对象通常在用户与设备上的物理或软件键盘交互时产生,KeyEvent可以帮助开发者创建更加互动和响应式的应用程序

KeyEvent 的主要属性

  • keyCode:这是一个整数值,表示按下的键。Android 定义了一系列的键码常量,如 KeyEvent.KEYCODE_A、KeyEvent.KEYCODE_ENTER 等
  • action:这是一个枚举值,表示按键的动作。它可以是 ACTION_DOWN(按键按下)、ACTION_UP(按键释放)或 ACTION_MULTIPLE(多次按键)
  • eventTime:这是一个长整数值,表示事件发生的时间戳,通常是从系统启动到事件发生的时间(以毫秒为单位)
  • repeatCount:这是一个整数值,表示按键重复的次数。如果用户长时间按住一个键,系统可能会多次发送 ACTION_DOWN 事件,这个值就会增加

KeyEvent 的使用场景

  • 监听按键事件:你可以在 Activity 或 View 中重写 onKeyDown、onKeyLongPress、onKeyUp 方法来监听和处理按键事件
  • 处理输入:在用户输入文本时,你可以使用 KeyEvent 来处理字符输入和特殊按键(如删除键、回车键等)
  • 游戏开发:在游戏开发中,KeyEvent 可以用来监听玩家的按键操作,如移动角色或触发游戏动作
  • 自定义控件:如果你创建了一个自定义控件,并希望它能够响应特定的按键操作,你可以使用 KeyEvent 来实现这一功能

基本使用

Activity 中监听按键事件的示例代码:

import android.view.KeyEvent;
import androidx.appcompat.app.AppCompatActivity;public class MyActivity extends AppCompatActivity {@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_ENTER) {// 处理回车键事件return true;}return super.onKeyDown(keyCode, event);}@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_ENTER) {// 处理回车键释放事件return true;}return super.onKeyUp(keyCode, event);}@Overridepublic boolean onKeyLongPress(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_ENTER) {// 处理回车键长按事件return true;}return super.onKeyLongPress(keyCode, event);}
}
  • 如上,重写onKeyDown、onKeyUp 和 onKeyLongPress 方法来监听回车键的事件,如果用户按下或释放回车键,或者长时间按住回车键,这些方法将被调用,并且可以根据需要处理事件
  • Android设备相关的所有按键、对应事件都存储在KeyEvent类中,其源代码如下:
public class KeyEvent extends InputEvent implements Parcelable {// 未知按键public static final int KEYCODE_UNKNOWN         = 0;// 向左的按钮public static final int KEYCODE_SOFT_LEFT       = 1;public static final int KEYCODE_SOFT_RIGHT      = 2;// 回到应用HOME的按钮public static final int KEYCODE_HOME            = 3;// 返回键   public static final int KEYCODE_BACK            = 4;public static final int KEYCODE_CALL            = 5;/** Key code constant: End Call key. */public static final int KEYCODE_ENDCALL         = 6;//数字0~9的按键public static final int KEYCODE_0               = 7;public static final int KEYCODE_1               = 8;public static final int KEYCODE_2               = 9;/** Key code constant: '*' key. */public static final int KEYCODE_STAR            = 17;/** Key code constant: '#' key. */public static final int KEYCODE_POUND           = 18;/** Key code constant: Directional Pad Up key.* May also be synthesized from trackball motions. */public static final int KEYCODE_DPAD_UP         = 19;/** Key code constant: Directional Pad Down key.* May also be synthesized from trackball motions. */public static final int KEYCODE_DPAD_DOWN       = 20;/** Key code constant: Directional Pad Left key.* May also be synthesized from trackball motions. */public static final int KEYCODE_DPAD_LEFT       = 21;/** Key code constant: Directional Pad Right key.* May also be synthesized from trackball motions. */public static final int KEYCODE_DPAD_RIGHT      = 22;/** Key code constant: Directional Pad Center key.* May also be synthesized from trackball motions. */public static final int KEYCODE_DPAD_CENTER     = 23;/** Key code constant: Volume Up key.* Adjusts the speaker volume up. */public static final int KEYCODE_VOLUME_UP       = 24;/** Key code constant: Volume Down key.* Adjusts the speaker volume down. */public static final int KEYCODE_VOLUME_DOWN     = 25;/** Key code constant: Power key. */public static final int KEYCODE_POWER           = 26;/** Key code constant: Camera key.* Used to launch a camera application or take pictures. */public static final int KEYCODE_CAMERA          = 27;/** Key code constant: Clear key. */public static final int KEYCODE_CLEAR           = 28;// 英文字母A~Z的按键public static final int KEYCODE_A               = 29;/** Key code constant: 'B' key. */public static final int KEYCODE_B               = 30;/** Key code constant: 'C' key. */public static final int KEYCODE_C               = 31;// ...public static final int KEYCODE_Z               = 54;/** Key code constant: ',' key. */public static final int KEYCODE_COMMA           = 55;/** Key code constant: '.' key. */public static final int KEYCODE_PERIOD          = 56;/** Key code constant: Left Alt modifier key. */public static final int KEYCODE_ALT_LEFT        = 57;/** Key code constant: Right Alt modifier key. */public static final int KEYCODE_ALT_RIGHT       = 58;/** Key code constant: Left Shift modifier key. */public static final int KEYCODE_SHIFT_LEFT      = 59;/** Key code constant: Right Shift modifier key. */public static final int KEYCODE_SHIFT_RIGHT     = 60;/** Key code constant: Tab key. */public static final int KEYCODE_TAB             = 61;/** Key code constant: Space key. */public static final int KEYCODE_SPACE           = 62;// ...
}
http://www.lryc.cn/news/377110.html

相关文章:

  • 移植案例与原理 - HDF驱动框架-驱动配置(2)
  • 年终奖发放没几天,提离职领导指责我不厚道,我该怎么办?
  • 多处理系统结构
  • 创建进程的常用方式
  • 李宏毅2023机器学习作业HW06解析和代码分享
  • 专业技能篇--算法
  • Vue中CSS动态样式绑定
  • 【漏洞复现】契约锁电子签章平台 add 远程命令执行漏洞(XVE-2023-23720)
  • 计算机专业是否仍是“万金油”?
  • Spring 启动顺序
  • 2024.06.19 刷题日记
  • linux系统中,pwd获取当前路径,dirname获取上一层路径;不使用 ../获取上一层路径
  • DeepSpeed Monitoring Comm. Logging
  • 关于INCA的几个实用功能
  • Mamaba3--RNN、状态方程、勒让德多项式
  • PLC模拟量和数字量到底有什么区别?
  • html中如何写一个提示框,css画一个提示框
  • ExoPlayer 学习笔记
  • 汽车IVI中控开发入门及进阶(二十七):车载摄像头vehicle camera
  • Transformer模型:未来的改进方向与潜在影响
  • ROS 激光雷达
  • 杂说咋说-关于城市化发展和城市治理的几点建议(浙江借鉴)
  • Linux 常用命令 - which【定位可执行文件的位置】
  • js文件导出功能
  • PHP转Go系列 | 字符串的使用姿势
  • vue关于:deep穿透样式的理解
  • 算法 |数字计数
  • 通义千问调用笔记
  • Linux常见的压缩文件种类与对应的压缩解压方法
  • LNMP网站架构