2016-05-15 22 views
1

Androidの特定のキーイベントを待ち受けようとしています。イベントリスナーを編集テキストに添付しました。私はspace-bar press、pound、@ key.forを探しています。何らかの理由でこのイベントがスペースバーと数字キーのためだけに発せられます。この関数は他のキーでも実行されることはありません。なぜか知りたいですか?彼らが私が間違っていることは何ですか?Android KeyEvent登録していません

package com.stv.mynotes; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 

import java.util.StringTokenizer; 

public class TestActivity extends AppCompatActivity implements View.OnKeyListener 
{ 

    EditText edit_txt; 

    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 
     edit_txt = (EditText) (findViewById(R.id.test_txt)); 
     edit_txt.setOnKeyListener(this); 
    } 
    public boolean onKey(View v,int keyCode,KeyEvent event) 
    { 
     int tmpCode = event.getKeyCode(); 
     if (event.getAction() == KeyEvent.ACTION_DOWN) 
     { 
      if (tmpCode == KeyEvent.KEYCODE_SPACE) 
      { 
       Log.i("Test", "Space pressed:"+tmpCode); 
       return true; 
      } 
      if (tmpCode == KeyEvent.KEYCODE_9) 
      { 
       Log.i("Test", "9 pressed:"+tmpCode); 
       return true; 
      } 
      else 
      { 
       Log.i("Test","Unknown Down:"+tmpCode); 
       return false; 
      } 
     } 
     if(event.getAction()==KeyEvent.ACTION_UP) 
     { 
      if (tmpCode == KeyEvent.KEYCODE_POUND) 
      { 
       Log.i("Test", "Pound pressed:"+tmpCode); 
       return true; 
      } 
      if (tmpCode == KeyEvent.KEYCODE_AT) 
      { 
       Log.i("Test", "@ pressed:"+tmpCode); 
       return true; 
      } 
      else 
      { 
       Log.i("Test","Unknown UP:"+tmpCode); 
       return false; 
      } 
     } 
     else 
      return false; 
    } 
} 

答えて

0

私はここでhttp://developer.android.com/reference/android/text/method/KeyListener.html onClickListenerについてこれを見つけた:ソフトインプットメソッドの

キーを押すが、このリスナーのメソッドをトリガするために必要とされていない、実際にso.Theデフォルトのアンドロイドを行うには落胆していますキーボードは、Jelly Bean以降を対象とするアプリケーションのキーに対してこれらを起動せず、アイスクリームサンドイッチ以前のものを対象とするアプリケーションへのキー入力のためにのみ提供します。

また:InputMethodによって定義されるように、ほとんどの場合、このインターフェイスは、一般的なソフト入力方法に取って代わられたこと

注意。アプリケーションが独自のオンスクリーンキーパッドを持ち、ハードキーボードイベントを処理してそれにマッチさせたい場合にのみ使用してください。

上記のような状況にある場合は、ドキュメントの推奨に従ってコードを再検討してください。代替案として
、あなたはこれを使用することを試みることができる:

Trueで
edit_txt.addTextChangedListener(new TextWatcher() { 
     int initialLength = 0; 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      initialLength = edit_txt.getText().length(); 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      int newLength = edit_txt.getText().length(); 
      if(newLength<initialLength) return; 
      if(edit_txt.getText().charAt(newLength-1)=='@'){ 
       Log.i("test", "@"); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) {} 
    }); 
+0

、キーイベントのみが、このようなボリュームや電源ボタンなどの物理的なキーのために、あなたの提案が正しいです。キー入力のみで入力イベントを聞くことは推奨されていません。入力は今マイクから行うことができます。私はテキストウォッチャーを使用してそれを実装することができました。 ありがとうございます。 – Wafic