在Android 系统中定义了大量的物理和虚拟按键,比如返回键,home键,数字键等。
在添加按键之前,需要了解Andorid 系统的按键软件架构,以物理按键为例。
1. 驱动层
将物理按键的键值上报给按键框架层。在手机的文件系统中,有这样的一个目录 /dev/input,按键框架层,就是通过检测这个目录,看是否有按键值上报。
2. 按键框架层
2.1 将驱动中定义个的按键值映射成按键码.(*.kl)
按键值映射文件 *.kl
如Generic.kl,qwerty.kl 等。
key 123 BACK
这句话的意思是 将驱动上报的键值 123 映射城按键码 BACK,BACK 有自己的值(KeycodeLabel.h).
2.2 将按键码映射成用户可见的字符.(*.kcm)
按键字符映射文件 *.kcm
将按键码映射成多个可显示的用户可以看到的字符。
如 qwerty.kcm(全键盘)
META Keys:就是ALT、SHIFT、CAPS_LOCK 这几个键。
key A {
label: 'A'
number: '2'
base: 'a'
shift, capslock: 'A'
alt: '#'
shift+alt, capslock+alt: none
}
label 表示显示的字符 'A"
number 表示这个按键码对应的数字,如在 九宫格中,按下包含a的那个键时,对应的数字键就是2
base 表示,ALT,SHIFT,CAPS_LOCK 这些按键没有被按下时,需要显示的字符
shift,capslock 表示shift或者capslock 被按下时,需要显示的字符
其他的类似。
3. 按键应用层
应用层在onKeyUp,onKeyDown 中识别的就是keyCode.