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 中监听按键事件的示例代码:

java 复制代码
import android.view.KeyEvent;
import androidx.appcompat.app.AppCompatActivity;

public class MyActivity extends AppCompatActivity {

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_ENTER) {
            // 处理回车键事件
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_ENTER) {
            // 处理回车键释放事件
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }

    @Override
    public boolean onKeyLongPress(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_ENTER) {
            // 处理回车键长按事件
            return true;
        }
        return super.onKeyLongPress(keyCode, event);
    }
}
  • 如上,重写onKeyDown、onKeyUp 和 onKeyLongPress 方法来监听回车键的事件,如果用户按下或释放回车键,或者长时间按住回车键,这些方法将被调用,并且可以根据需要处理事件
  • Android设备相关的所有按键、对应事件都存储在KeyEvent类中,其源代码如下:
java 复制代码
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;
    
    // ...
}
相关推荐
每次的天空27 分钟前
Android学习总结之算法篇五(字符串)
android·学习·算法
Gracker1 小时前
Android Weekly #202513
android
张拭心3 小时前
工作九年程序员的三月小结
android·前端
每次的天空3 小时前
Flutter学习总结之Android渲染对比
android·学习·flutter
鸿蒙布道师6 小时前
鸿蒙NEXT开发土司工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
智想天开6 小时前
11.使用依赖注入容器实现松耦合
android
yunteng5217 小时前
音视频(四)android编译
android·ffmpeg·音视频·x264·x265
tangweiguo030519877 小时前
(kotlin) Android 13 高版本 图片选择、显示与裁剪功能实现
android·开发语言·kotlin
匹马夕阳7 小时前
(一)前端程序员转安卓开发分析和规划建议
android·前端
Kika写代码8 小时前
【Android】UI开发:XML布局与Jetpack Compose的全面对比指南
android·xml·ui