Android - 获取键盘按键

Bem*_*efe 26 java keyboard android keyevent android-input-method

我想要按下软键盘的任何键.我不想在我的Activity中使用EditView或TextView,必须从我的Activity中的扩展View处理该事件.

我刚试过这个:

1)覆盖onKeyUp(int keyCode, KeyEvent event)Activity方法.这不适用于softkeybord它只是抓住几个硬键盘.

2)创建我的OnKeyListener并在我的视图中注册包含注册和工作的OnTouchListener.这与softkeyboar完全不兼容.

3)覆盖onKeyUp(int keyCode, KeyEvent event)View方法.如果我设置我的OnKeyListener,如果我没有设置它,这根本不起作用.

4)使用InputMethodManager对象调用方法showSoftInput并将其传递给我的View.这对于抬起键盘既不起作用,实际上我不得不打电话toggleSoftInput; 也没有抓住关键事件.

我只在模拟器中测试过,但我认为这已经足够了.为什么它如此复杂从键盘上取一个简单的键事件?

vas*_*art 38

尝试使用dispatchKeyEvent(KeyEvent event)你的Activity

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    Log.i("key pressed", String.valueOf(event.getKeyCode()));
    return super.dispatchKeyEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

  • @vasart Dispatch Veent没有调用Keboard View键,只有在按下Back键/按下硬件键时才会调用它. (3认同)

Bem*_*efe 14

随着vasart的提示, 我可以获得KeyPress事件.为了使键码可打印我已经使用函数getUnicodeChar传递元按钮状态然后只是一个char cast解决问题.

这是工作代码:

@Override
public boolean dispatchKeyEvent(KeyEvent KEvent) 
{
    int keyaction = KEvent.getAction();

    if(keyaction == KeyEvent.ACTION_DOWN)
    {
        int keycode = KEvent.getKeyCode();
        int keyunicode = KEvent.getUnicodeChar(KEvent.getMetaState() );
        char character = (char) keyunicode;

        System.out.println("DEBUG MESSAGE KEY=" + character + " KEYCODE=" +  keycode);
    }


    return super.dispatchKeyEvent(KEvent);
}
Run Code Online (Sandbox Code Playgroud)

当然这只能使用ASCII字符.