android 键盘 码,Android键盘输出增加按键码

这篇博客详细介绍了Android系统中按键事件的处理过程,包括从键扫描码(ScanCode)到按键码(KeyCode)的转换步骤。首先,通过键盘布局文件(keylayout)将ScanCode转换为表示按键的字符串,然后通过KeycodeLabels.h中的KEYCODES数组将字符串转换为KeyCode值,这些值在android/keycodes.h中被定义。整个过程涉及到了输入事件的底层驱动和上层应用的交互,对于理解Android系统的输入事件处理机制至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发过程中免不得需要增加或减少按键码值,在Android2.3系统事件处理部分,主要向上层提供统一的按键码(KeyCode),这个按键码是一个整数,在上层的JAVA程序中主要通过这个值来判断系统的实现。

关于输入事件的处理前面已经讲过,请参考:http://www.linuxidc.com/Linux/2012-01/50691.htm

这里主要讲android事件的处理过程,需要经过两个转换步骤: 

1453192d0dba703846a8caaade262a77.gif

1、键扫描码ScanCode是由linux的Input驱动框架定义的整数类型,可参考input.h头文件

在步骤一中将其值转换成表示按键的字符串

键盘布局文件(*.kl)将完成第一步的转换,放在/system/usr/keylayout/下面

举例如下:

input.h 中字母键定义:

#define KEY_Q 16

#define KEY_W 17

#define KEY_E 18

#define KEY_R 19

#define KEY_T 20

#define KEY_Y 21

#define KEY_U 22

#define KEY_I 23

#define KEY_O 24

#define KEY_P 25

而qwert.kl中定义如下:

ScanCode + 字符串值

key 16    Q

key 17    W

key 18    E

key 19    R

key 20    T

key 21    Y

key 22    U

key 23    I

key 24    O

key 25    P

2、通过查找KEYCODES数组,将literal字符串转换成value的整型值,即转换到KeyCode值了

片段如下,右边的值是android系统中使用的KeyCode值:(文件路径:frameworks/base/include/ui/KeycodeLabels.h)

static const KeycodeLabel KEYCODES[] = {

...

{ "A", 29 },

{ "B", 30 },

{ "C", 31 },

{ "D", 32 },

{ "E", 33 },

{ "F", 34 },

{ "G", 35 },

{ "H", 36 },

{ "I", 37 },

{ "J", 38 },

{ "K", 39 },

{ "L", 40 },

{ "M", 41 },

{ "N", 42 },

{ "O", 43 },

{ "P", 44 },

{ "Q", 45 },

{ "R", 46 },

{ "S", 47 },

{ "T", 48 },

{ "U", 49 },

{ "V", 50 },

{ "W", 51 },

{ "X", 52 },

{ "Y", 53 },

{ "Z", 54 },

...

};

右边的值在android中定义如下:(文件路径:frameworks/base/include/android/keycodes.h)

/*

* Key codes.

*/

enum {

AKEYCODE_A               = 29,

AKEYCODE_B               = 30,

AKEYCODE_C               = 31,

AKEYCODE_D               = 32,

AKEYCODE_E               = 33,

AKEYCODE_F               = 34,

AKEYCODE_G               = 35,

AKEYCODE_H               = 36,

AKEYCODE_I               = 37,

AKEYCODE_J               = 38,

AKEYCODE_K               = 39,

AKEYCODE_L               = 40,

AKEYCODE_M               = 41,

AKEYCODE_N               = 42,

AKEYCODE_O               = 43,

AKEYCODE_P               = 44,

AKEYCODE_Q               = 45,

AKEYCODE_R               = 46,

AKEYCODE_S               = 47,

AKEYCODE_T               = 48,

AKEYCODE_U               = 49,

AKEYCODE_V               = 50,

AKEYCODE_W               = 51,

AKEYCODE_X               = 52,

AKEYCODE_Y               = 53,

AKEYCODE_Z               = 54,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值