【问题标题】:android - getting soft keyboard key pressesandroid - 获取软键盘按键
【发布时间】:2015-03-18 08:56:09
【问题描述】:

我正在尝试按下软键盘上的键,但无法这样做。 目前我正在使用以下代码

@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);

}

它正在捕获硬件键盘的键事件,而不是虚拟键盘。谁能帮帮我

【问题讨论】:

标签: java android keyboard keyevent


【解决方案1】:

来自Android Official Page

注意:当使用 KeyEvent 类和相关 API 处理键盘事件时,您应该期望此类键盘事件仅来自硬件键盘。您永远不应依赖接收软输入法(屏幕键盘)上任何键的键事件。

所以你应该使用TextWatcher接口来观察软键盘上按下的字符,例如:

myEditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {


        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            // TODO Auto-generated method stub
        }

        @Override
        public void afterTextChanged(Editable s) {

            // TODO Auto-generated method stub
        }
    });

【讨论】:

  • 这是一个有用的解决方案,顶一下。
【解决方案2】:

这应该是您的解决方案:

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

    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 1) { 
        finish();
        return true; 
    }

    return super.onKeyDown(keyCode, event);
}

【讨论】:

    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2011-08-25
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多