KeyListenerは、入力を認識しません

その他:

私はそうのようなEDITTEXT上のKeyListenerを持っています。

tip = (EditText) findViewById(R.id.tip);
tip.setOnKeyListener(new EditText.OnKeyListener(){
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        Log.i("debug123", "onKeyListener. event.getKeyCode(): " + event.getKeyCode());

        // If the event is a key-down event on the "enter" button
        if ((event.getAction() == KeyEvent.ACTION_DOWN) && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
            checkInput();
            return true;
        }
        return false;
    }
});

しかし、誰softkeyboardストロークが認識されませんか。?私はBACK-ボタン(HardwareButton)で活動を去ったときのみ、リスナーがアクションを認識しています。しかし、私は読むことをすべてから、これは私が仕事をしたい場合のEditTextでのユーザ入力を移動するための方法です。

。メリーランド州Asaduzzaman:

setOnKeyListener

ときに呼び出されるコールバック関数を登録し、ハードウェアキーは、このビューに押されます。でキープレスのソフトウェアの入力方法は、一般的にこのリスナーのメソッドをトリガしません。

setOnEditorActionListener

アクションはテキストビュー上で実行されたときに呼び出される特殊なリスナーを設定します。ときに呼び出されるキーを入力して押されたとき、またはアクション IMEに供給されるが、ユーザによって選択されます。

使用して、あなたの問題を解決するためにsetOnEditorActionListener、以下を確認してください。

  • 追加imeOptionsinputTypeあなたへEditText
<EditText
    android:id="@+id/tip"
    android:imeOptions="actionDone"
    android:inputType="text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
  • その後、追加setOnEditorActionListenerEditText
tip.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

        if ( (actionId == EditorInfo.IME_ACTION_DONE) || (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) ) {
            checkInput();
            return true;
        } else {
            return false;
        }
    }
});

ここに、

  • actionId == EditorInfo.IME_ACTION_DONE ソフトキーボード(IME)からハンドルアクション
  • event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN ハンドルは、ハードウェアキーボードからキーを入力してください

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=8032&siteId=1