0

私はこのコードでアンドロイドでソフトキーボードのイベントを処理しようとしています:

   public class MainActivity extends Activity implements OnKeyListener  {
     EditText editText1;
     EditText editText2;
          public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          editText1 = (EditText) findViewById(R.id.editText1);
          editText1.setOnKeyListener(this);
          editText2 = (EditText) findViewById(R.id.editText2);
          editText2.setOnKeyListener(this);
        //  InputMethodManager imm = (InputMethodManager)       getSystemService(Context.INPUT_METHOD_SERVICE);
        // imm.showSoftInput(editText1, InputMethodManager.SHOW_IMPLICIT);
           }
          public boolean onKey(View view, int keyCode, KeyEvent event) {
              if (keyCode == KeyEvent.KEYCODE_B|| keyCode ==KeyEvent.KEYCODE_5) 
              {

                  editText2.setText("hello");  
                   return true;
              }


              return false; // pass on to other listeners.
             }
        }

しかし、bまたは任意のキーを押しても何も生成されません

数字キーを押すと、イベントが生成されました

誰でも私を助けて、私のコードを編集してください。

助けてくれてありがとうが、私はそのコードをトレイに入れ、動作せず、yhisは新しいコードです:

public class MainActivity extends Activity   {
     EditText editText1;
     EditText editText2;
          public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          editText1 = (EditText) findViewById(R.id.editText1);

          editText2 = (EditText) findViewById(R.id.editText2);

        //  InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        // imm.showSoftInput(editText1, InputMethodManager.SHOW_IMPLICIT);
           }
          public boolean onKeyDown(int keyCode, KeyEvent event) {
              if (keyCode == KeyEvent.KEYCODE_B|| keyCode ==KeyEvent.KEYCODE_5) 
              {

                  editText2.setText("hello");  
                   return true;
              }


              return false; // pass on to other listeners.

        }

        }

私の問題に従ってくださいよろしく

4

1 に答える 1

1

http://developer.android.com/reference/android/view/KeyEvent.htmlから

*ソフト入力メソッドはテキストを入力する複数の独創的な方法を使用できるため、ソフト キーボードでキーを押してもキー イベントが生成されるという保証はありません。これは IME の裁量に任されており、実際にはそのようなイベントの送信は推奨されません。ソフト入力メソッドのキーの KeyEvents の受信に依存しないでください。特に、デフォルトのソフトウェア キーボードは、Jelly Bean 以降を対象とするアプリケーションにキー イベントを送信することはなく、Ice Cream Sandwich 以前を対象とするアプリケーションには、delete キーと return キーの一部の押下に対するイベントのみを送信します。他のソフトウェアの入力方法では、バージョンに関係なくキー イベントが送信されない場合があることに注意してください。ソフトウェア キーボードとの特定の操作が必要な場合は、IME_ACTION_DONE などのエディター アクションの使用を検討してください。

したがって、ほとんどのキーは KeyEvent を生成しません。

押されたソフトキーボードをキャプチャするには、試すことができます

@Override public boolean dispatchKeyEvent(KeyEvent event) 
{ 
    int keyCode = event.getKeyCode();
    if (keyCode == KeyEvent.KEYCODE_B|| keyCode ==KeyEvent.KEYCODE_5) 
          {

              editText2.setText("hello");  

          }
    return super.dispatchKeyEvent(event); 
} 

または、ソフトキーボードがキーを処理する前に処理したい場合は、dispatchKeyEventPreIme (KeyEvent イベント) で同じコードを使用します。

于 2013-03-15T06:39:50.160 に答える