Android中添加USB键盘的CapsLock键
来源:互联网 发布:淘宝网户外家具 编辑:程序博客网 时间:2024/06/06 03:52
转自: http://blog.csdn.net/joard_yang/article/details/7191313
Android平板的硬件越来越强大屏幕越来越大,大家希望按照使用PC的习惯来使用它,如果要在平板上进行大量的文字输入使用虚拟按键简直就是折磨自己,USB键盘才是正常的输入设备,下面的文章记录了调试键盘中对CapsLock按键添加的过程。
国际标准USB键盘的所有的按键在linux中已经有键值了在文件external/qemu/linux_keycodes.h,比如capslock没有功能只因为按键没有报到上层和中间层,在android_text_KeyCharacterMap.cpp的get函数中加log打印出Keycode会发现CapsLock的Keycode是0,现在首要是让Keycode报上来,以下的内容兼顾2.2和2.3
1.由于Android是基于Linux内核的,external/qemu/linux_keycodes.h文件中查到CapsLock按键的扫描码的值582.frameworks/base/core/java/android/view/KeyEvent.java
添加按键最起码,要涉及到三个文件:KeyEvent.java、qwerty.kl、qwerty.kcm,由于,
KeyEvent.java中描述所以放在开始来写。注意“NOTE”部分的描述
public static final int KEYCODE_CAPS_LOCK = 115;
// NOTE: If you add a new keycode here you must also add it to:
// isSystem()
// frameworks/base/include/ui/KeycodeLabels.h
// frameworks/base/core/res/res/values/attrs.xml
以上是2.2的2.3的有些不同
// isSystem()
// native/include/android/keycodes.h
// frameworks/base/include/ui/KeycodeLabels.h
// external/webkit/WebKit/android/plugins/ANPKeyCodes.h
// frameworks/base/core/res/res/values/attrs.xml
NOTE所涉及的文件要把我们的键值添加进去
public final boolean isSystem() {
....
case KEYCODE_CAPS_LOCK:
....
}
这里2.2和2.3有一点不一样,2.3中的isSystem改在了
frameworks/base/libs/ui/input.cpp中
3.在frameworks/base/include/ui/KeycodeLabels.h中添加
static const KeycodeLabel KEYCODES[] = {
...
{"CAPS_LOCK",115},
...
}
typedef enum KeyCode {
...
kKeyCapsLock = 115
...
} KeyCode;(2.3里没有这一部分,类似的内容在frameworks\base\native\include\android\Keycodes.h的数组中)
4.在frameworks/base/core/res/res/values/attrs.xml中添加
<attr name="keycode">
...
<enum name="KEYCODE_CAPS_LOCK" value="115" />
</attr>
...
5.external\qemu\android\Keycode.h
/* Keep it consistent with linux/input.h */
typedef enum {
...
kKeyCapsLock = KEY_CAPSLOCK,
...
} AndroidKeyCode;
6.external\webkit\webcore\platform\android\KeyEventAndroid.cpp
// compare to same function in gdk/KeyEventGdk.cpp
static int windowsKeyCodeForKeyEvent(unsigned int keyCode)
{
// Does not provide all key codes, and does not handle all keys.
switch (keyCode) {
...
case kKeyCapsLock:
return 0x14;
default:
return 0;
}
}
7.external\webkit\webkit\android\plugins\ANPKeyCodes.h
enum ANPKeyCodes {
...
kCapsLock_ANPKeyCode = 115
};
8.sdk\emulator\keymaps\qwerty.kl
key 58 CAPS_LOCK
添加后android_text_KeyCharacterMap.cpp中的log会有115的Keycode报出。下面就是将大写锁定的功能实现,这也简单在MetaKeyKeyListener.java (frameworks\base\core\java\android\text\method) 的onkeyup方法中添加
if(keyCode == KeyEvent.KEYCODE_CAPS_LOCK){
if(!isCapsLockPress){
press(content, CAP);
}else{
press(content, CAP);
release(content, CAP);
}
isCapsLockPress = !isCapsLockPress;
return true;
}
- Android中添加USB键盘的CapsLock键
- Android中添加USB键盘的CapsLock键
- Android中添加USB键盘的CapsLock键
- android:添加usb键盘+按键布局和映射的修改
- android:添加usb键盘+按键布局和映射的修改
- android:添加usb键盘+按键布局和映射的修改
- android:添加usb键盘+按键布局和映射的修改
- android:添加usb键盘+按键布局和映射的修改
- linux下交换ctrl和capslock之间的键盘映射
- USB键盘的键值
- 键盘上CapsLock键按了之后无法关闭大写锁定
- ubuntu14.04 修改键盘映射 CapsLock->Ctrl
- EditText添加android:imeOptions="actionSearch"弹出的键盘中带有搜索按钮
- iOS开发监听键盘(添加键盘和隐藏键盘,改变视图中整体控件随着键盘的高度移动)
- Android usb camera设备添加
- android中 点击非键盘区域 隐藏键盘的方法
- android 4.1 平板连接USB键盘,默认键盘布局
- USB键盘
- linux主机644、755、777权限详解
- 分治算法-选手赛程安排
- 聚聚索引 和非聚集索引
- myeclipse和eclipse插件checkstyle
- CodePage简介(转)
- Android中添加USB键盘的CapsLock键
- OTDR简介
- P2P原理的解释与实现
- 广州最牛的.Net中心 还有比传智播客更好的吗?
- UDT Tutorial 《Hello World!》
- php amqp 消息队列 RabbitMQ 基本概念(二)
- 一个PHP官方的例子
- centos php加载mysql扩展实现方法
- Writing efficient CSS(编写高效的CSS)