Android:如何通过示例获取任何KeyPress事件?

Hir*_*bhi 14 android event-handling

我希望在用户按任意键时获取键值,并根据在android中按下的键执行操作.

例如,如果用户按下"A"键,那么我想获得该值,比较,做一些事情.

Zel*_*mir 23

对这个问题的回答应该是双重的.它取决于密钥的生成方式.如果按下硬件密钥,则下面描述的两种方法都有效.如果是按下软件键,则取决于实际情况.

1.)如果按键是通过长按菜单键获得的软键盘按下的结果:

您需要仔细覆盖以下功能:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_A:
        {
            //your Action code
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

2.)如果您的活动包含EditText,并且从中获取了软键盘,则第一种方法不起作用,因为EditText已经使用了键事件.您需要使用文本更改的Listener:

mMyEditText.addTextChangedListener(new TextWatcher()
{
    public void afterTextChanged(Editable s) 
    {
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) 
    {
        /*This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after. It is an error to attempt to make changes to s from this callback.*/ 
    }
    public void onTextChanged(CharSequence s, int start, int before, int count) 
    {
    }
);
Run Code Online (Sandbox Code Playgroud)


jfc*_*ato 6

如果您的ssoo版本不超过2.3,则Zelimir代码有效。如果您的代码在2.3中运行,则根本无法工作,在所有ssoo版本中控制事件键的方法是使用dispatchKeyEvent()

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

这样,您可以控制在Web视图中或无论身在何处的按键。唯一的错误是您无法控制“操作按钮”……不知道为什么。

  • 如果输入语言不是英语,则不起作用。`dispatchKeyEvent` 根本没有被调用。 (2认同)