2017-07-03 89 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; 
     } 
});