keyListener 无法识别输入

keyListener does not recognise input

我在 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;
    }
});

但是没有识别出软键盘笔画。? 只有当我用后退按钮(硬件按钮)离开 Activity 时,监听器才能识别该动作。 但是从我读到的所有内容来看,如果我想在 EditText 中使用用户输入,这就是方法。

setOnKeyListener

Register a callback to be invoked when a hardware key is pressed in this view. Key presses in software input methods will generally not trigger the methods of this listener.

setOnEditorActionListener

Set a special listener to be called when an action is performed on the text view. This will be called when the enter key is pressed, or when an action supplied to the IME is selected by the user.

要使用 setOnEditorActionListener 解决您的问题,请检查以下内容:

  • imeOptionsinputType 添加到您的 EditText
<EditText
    android:id="@+id/tip"
    android:imeOptions="actionDone"
    android:inputType="text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
  • 然后将setOnEditorActionListener添加到EditText
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 处理硬件键盘的输入键