2017-07-03 25 views
0

どのキーが押されたのかを検出しようとしていましたが、これまでのところdispatchKeyEvent()メソッドでSHIFT、BACKSPACE、ENTERを検出できましたが、文字と数字は検出されないようです。また、onKeyDownonKeyUpを試してみましたが、シフト、バックスペース、および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); 
} 

でそれを表示するには、これはアルファベット

+0

あなたが行っていることを示す[mcve]を提供してください。 – CommonsWare

答えて

0

はこのようなものを使用し、SHIFTためBACKSPACEをキーコードを検出し、ENTERではなく、さ:

@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.addonTexchangeのlisternerを使用することができますし、このonTextChange方法であなたはあなただけの最後得ることができます押されたものを、テキストを表示することができますので、すべてのcharectorプレスでトーストを表示するために達成したい場合は
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に入り、トーストに出演する。

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; 
     } 
}); 
関連する問題