Android:KeyEvent.KEYCODE_X显示为'8'

时间:2013-10-04 06:31:23

标签: java android android-edittext keyevent

我为一个应用程序实现了我自己的自定义键盘,该应用程序只是将带有文本的按钮映射到一个键,然后将其发送到EditText。

当按下一个按钮时,我最终调用此方法,传入EditText以添加角色,以及要追加的角色。

public void keypadPress(EditText etInput, char character) {
    etInput.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, getKeyEvent(character)));
}

getKeyEvent看起来像这样:

public static int getKeyEvent(char c) {
    switch (c) {
    case '0':
        return KeyEvent.KEYCODE_0;
    case '1':
        return KeyEvent.KEYCODE_1;
    case '2':
        return KeyEvent.KEYCODE_2;
    case '3':
        return KeyEvent.KEYCODE_3;
    case '4':
        return KeyEvent.KEYCODE_4;
    case '5':
        return KeyEvent.KEYCODE_5;
    case '6':
        return KeyEvent.KEYCODE_6;
    case '7':
        return KeyEvent.KEYCODE_7;
    case '8':
        return KeyEvent.KEYCODE_8;
    case '9':
        return KeyEvent.KEYCODE_9;
    case '-':
        return KeyEvent.KEYCODE_MINUS;
    case '.':
        return KeyEvent.KEYCODE_PERIOD;
    case ',':
        return KeyEvent.KEYCODE_COMMA;
    case 'x':
        return KeyEvent.KEYCODE_X;
    default:
        return -1;
    }
}

EditText类型输入设置为'number'。此外,这在Android 4.0+中完全完美,但每当我点击我的'x'按钮时,它将被映射到API 8上的'8'(可能在下面)。我调试了它,它返回KeyEvent.KEYCODE_X(或52),但EditText中显示的是数字8.我完全无能为力,并且会感谢任何形式的帮助。

此外,我第一次使用此键盘实现打开屏幕时,每当我第一次单击按钮时,都会收到此警告...

10-04 01:16:29.804: W/KeyCharacterMap(8716): Can't open keycharmap file
10-04 01:16:29.804: W/KeyCharacterMap(8716): Error loading keycharmap file '/system/usr/keychars/touchscreen-keypad.kcm.bin'. hw.keyboards.0.devname='touchscreen-keypad'
10-04 01:16:29.804: W/KeyCharacterMap(8716): Using default keymap: /system/usr/keychars/qwerty.kcm.bin

之后再发出警告。

1 个答案:

答案 0 :(得分:1)

找到答案:

我还将digits属性设置为“0123456789,.- x”,即使我尝试将inputType更改为“text”,也会将KEYCODE_X映射到'8'。如果editText具有inputType数字或数字属性设置,即使您手动分派事件,非数字的密钥代码也将不正确。就我所知,这只发生在API 8及以下。在Android 4.0+上,即使inputType为“number”,也可以允许字母。