• 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 {
    
        @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类中,其源代码如下:
    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;
        
        // ...
    }
    
  • 相关阅读:
    智慧机房是什么机房?从系统优势了解一下
    Netty源码编译
    8.13
    GPT产业 行业研究报告合集整理
    Android 11.0 展讯平台关于ota升级开机logo的相关功能实现
    MySQL高级(纯笔记,未整理)
    浅谈网络损伤仪HoloWAN的使用场景
    Linux系统编程:编译过程以及GDB调试
    【语音识别】MFCC+VAD端点检测智能语音门禁系统【含GUI Matlab源码 451期】
    Nginx 安装配置
  • 原文地址:https://blog.csdn.net/FlyingFish868/article/details/139704336