2017-07-03 100 views
0

我试图检测哪个按键被按下,到目前为止我能够用dispatchKeyEvent()方法检测到SHIFT,BACKSPACE和ENTER,但它似乎不会检测到字母和数字。而且iv'e也尝试了onKeyDownonKeyUp,他们甚至没有检测到SHIFT,BACKSPACE和ENTER,更不用说字母和字母。 我的目标是在我的EditText键入一个字母和检测击键并与Toast检测哪个软键被按下了Android?

@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键的键码,显示它并输入而不是字母

+0

请提供一个[mcve]展示你在做什么。 – CommonsWare

回答

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); 
    } 
} 
+0

我在'onKeyDown()'和'onKeyUp()'中都试过了,仍然没有,所以我在'dispatchKeyEvent()'中使用了switch语句,甚至不会检测 – Basit

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(); 
     } 
    }); 
0

如果你想实现显示在每个charector按敬酒,所以你可以使用Edittext.addonTexchange listerner在这onTextChange方法,你可以告诉你按下了哪个你可以得到最后一个文本进入charector并显示给吐司。

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并使用不同的操作。 t

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