检测Android按下哪个软键?

时间:2017-07-03 16:08:45

标签: android keylistener keylogger onkeylistener

我试图检测按下了哪个键,到目前为止,我能够使用dispatchKeyEvent()方法检测到SHIFT,BACKSPACE和ENTER,但它似乎无法检测到字母和数字。而且我们还尝试了onKeyDownonKeyUp,他们甚至不会检测到SHIFT,BACKSPACE和ENTER,更不用说字母和字母了。 我的目标是在EditText中输入一个字母,然后检测KeyStroke并将其显示为Toast

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
   int keyaction = event.getAction();
   if(keyaction == KeyEvent.ACTION_DOWN )
    {
        String keycode = event.getCharacters();
        Toast toast = Toast.makeText(this,String.valueOf(event.getKeyCode()), Toast.LENGTH_LONG);
        toast.show();
    }
    return super.dispatchKeyEvent(event);
}

这是检测SHIFT,BACKSPACE和ENTER的键码而不是字母

3 个答案:

答案 0 :(得分:0)

使用类似的东西:

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_D:
            //do something
            return true;
        case KeyEvent.KEYCODE_F:
            //do something
            return true;
        case KeyEvent.KEYCODE_d:
            //do something
            return true;
        case KeyEvent.KEYCODE_f:
            //do something
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    }
}

答案 1 :(得分:0)

你要问的确切答案是: -

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) 
    {
         // Do Code here
    }
else if(keyCode == KeyEvent.KEYCODE_0) 
   {

   }
//And so on
return super.onKeyDown(keyCode, event); }

您可以在this page的常量部分阅读相关内容。

然而,从你问题的最后一行开始,我猜你是以错误的方式接近你的要求。你真的不需要上面的代码。相反,只需向EditText添加文本更改后的收听者,并在文本更改时生成Toast。类似于以下内容: -

 editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void afterTextChanged(Editable editable) {
           String text = s.toString();
           Toast.makeText(context,s.charAt(s.length()-1).toString(), Toast.LENGTH_LONG).show();
        }
    });

答案 2 :(得分:0)

如果你想在每个charector上显示吐司,那么你可以使用Edittext.addonTexchange listerner,在这个onTextChange方法中你可以显示你按下的文字,你可以最后输入charector并显示toast。

textView.addTextChangedListener(new TextWatcher(){

    @Override
    public void afterTextChanged(Editable arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // here right logic for get last char and show it on toast

    }

});

对于像done和Backpress这样的动作键,使用setOnKeyListener并使用不同的动作。 吨

extView.setOnKeyListener(new View.OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
            if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
                enterPressed();
                return true;
            }
            return false;
        }
});