Android中的KeyEvent详解

news/2024/6/18 21:24:32 标签: android

介绍

  • 在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;
    
    // ...
}

http://www.niftyadmin.cn/n/5520406.html

相关文章

架构师 如何架构选型一个项目

一、项目背景分析 1. 项目目标和需求 项目目标是通过开发一个新产品或服务,解决特定问题或满足特定需求。项目需求是指项目所必需的功能、性能、质量等方面的要求。 项目目标和需求可能包括以下几个方面: 1. 解决问题:项目目标是通过开发…

如何通过 6 种方法从 iPhone 恢复已删除的文件

想知道如何从 iPhone 恢复已删除的文件吗?本文将指导您如何从 iPhone 恢复数据,无论您是否有 iTunes/iCloud 备份。 iPhone 上已删除的文件去哪儿了? 许多 iPhone 用户抱怨他们经常丢失 iPhone 上的一些重要文件。由于意外删除、iOS 更新失败…

Qt项目天气预报(1) - ui界面搭建

ui中部 效果演示 ui效果 显示效果 控件列表 配合右图查看 居中对齐-label 设置label居中对齐(别傻傻的空格对齐了) 间距配置 widget03 外围的widget对象: 包含label 和 widget0301,如下图 widget0301 内围的widget对象,如下图 样式表 widget03 …

SAP RFC 输入一张表(C# 使用 SapNwRfc 二)

SapNwRfc中的配置参数,记录日志关闭 Trace0,可以得到很好的性能。 有网友在问,SAP RFC返回多张表(C# 使用 SapNwRfc 一)中如何输入一张表的数据,正好博主也遇到了这个场景,今天做了一个DEMO&…

【安卓】在安卓中使用HTTP协议的最佳实践

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

C51学习归纳13 --- AD/DA转换

AD/DA转换实现了计算机和模拟信号的连接,扩展了计算机的应用场景,为模拟信号数字化提供了底层支持。 AD转换通常是多个输入通道,使用多路选择器连接到AD开关,实现AD多路复用的目的,提高利用率。 AD/DA转换可以使用串口…

Web前端弱势因素:深入探讨与挑战解析

Web前端弱势因素:深入探讨与挑战解析 在快速发展的Web前端领域,尽管技术日新月异,但仍存在一些固有的弱势因素。这些因素不仅影响了开发效率和用户体验,也带来了诸多挑战。本文将深入探讨Web前端的弱势因素,并从四个方…

web前端筛选器:深度解析与高效应用

web前端筛选器:深度解析与高效应用 在web前端开发中,筛选器(Filter)是一个至关重要的工具,它能够帮助我们快速定位、选择并操作DOM元素。本文将从四个方面、五个方面、六个方面和七个方面,对web前端筛选器…