按键映射

1 键扫描码Scancode是由Linux的Input驱动框架定义的整数类型。

include/uapi/linux/input.h中有定义:

......
#define KEY_VOLUMEDOWN 114
#define KEY_VOLUMEUP 115
#define KEY_POWER 116 /* SC System Power Down */
#define KEY_MENU 139 /* Menu (show menu) */
#define KEY_BACK 158 /* AC Back */
......


2 键扫描码Scancode经过一次转化后,形成按键的标签KeycodeLabel->literal,是一个字符串的表示形式。

2.1 KCM(KeyCharacterMap):按键字符映射文件,位于/system/usr/keychars/目录,由KeyCharacterMap.cpp解析。

按键字符映射文件片段:

type FULLkey A {
 label: 'A' base: 'a' shift, 
 capslock: 'A'
}
key SPACE {
 label: ' ' 
 base: ' ' alt,
 meta: fallback SEARCH 
 ctrl: fallback LANGUAGE_SWITCH
}

Keyboard Type Declaration

一个键盘的type声明描述了键盘的总体行为。一个字符映射文件必须包含一个键盘type声明。为清楚起见,它通常被放在文件顶部。
可识别的键盘type如下:
(1) NUMERIC: 一个数字键盘(12个按键)。
一个数字键盘支持多次单击形式的文本输入。这对重复点击一个按键来产生期望的字母或符合的情况可能是必需的。
该键盘type通常是为了拇指输入设计的。
(2) PREDICTIVE: 一个带有全字母的键盘,每个按键代表一个以上的字母。
该键盘type通常是为了拇指输入设计的。
(3) ALPHA: 一个带有全字母的键盘,也可能有一些数字。
一个字母键盘支持直接的文本编辑,但也可能有一个小型化的浓缩布局。与FULL键盘相反,一些符号只能使用屏幕上特殊的字符选择器进行编辑。此外,为了提高输入速度和精确度,framework为字符键盘提供了特殊的支持,例如自动大写和切换/锁定SHIFT和ALT按键。该键盘type通常是为了拇指输入设计的。
(4) FULL: 一个全PC样式的键盘。
一个完整的键盘像一个PC键盘。所有符号都可以用键盘上的按键直接访问,不再有屏幕支持的字符选择器,也不再提供类似自动大写的支持。
(5) SPECIAL_FUNCTION: 一个键盘只用于执行系统的控制函数,而不用于输入。
一个特殊功能键盘只包括没有输入功能的按键,比如HOME和POWER并不是用来做输入的。
The Generic.kcm and Virtual.kcm key character maps are both FULL keyboards.

Key Declarations

每个key声明包括一个关键字key,随后是一个android key code name,一个{,设置 properties and behaviors,最后一个}。

(A) Properties

每个key属性建立一个从key到behavior的映射。为了更紧密地创建按键字符映射文件,一些属性可以被映射到同一behavior,用逗号分隔。
可识别的属性如下:
(1) label: 指定按键上物理打印的标签,它由单一字符组成,转换成为的显示内容。
number: 指定数字文本视图获得焦点的行为(字符必须被输入),例如当用户输入一个电话号码。转换成为的显示数字。紧密结合的键盘常常在一个按键上合并多个符号,这样同一个按键可以被用作'1' and 'a' or '#' and 'q&#

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值