Skip to content

EditText监听回车

使用EditText时,有时候我们会需要监听输入的回车,以做出一些操作。 或者需要把回车变成“搜索”,“发送”或“完成”等等。

EditText为我们提供了一个属性imeOptions用来替换软键盘中enter键的外观,如actionGo会使外观变成“前往”。 需要同时设置android:inputType="text"

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionGo"
    android:inputType="text" />

下面列出比较经常用到的几个属性以及替换的文本外观:

属性 说明 对应静态变量
actionUnspecified 未指定 EditorInfo.IME_ACTION_UNSPECIFIED
actionNone 动作 EditorInfo.IME_ACTION_NONE
actionGo 去往 EditorInfo.IME_ACTION_GO
actionSearch 搜索 EditorInfo.IME_ACTION_SEARCH
actionSend 发送 EditorInfo.IME_ACTION_SEND
actionNext 下一项 EditorInfo.IME_ACTION_NEXT
actionDone 完成 EditorInfo.IME_ACTION_DONE

设置的方法可以在布局文件中设置 android:imeOptions="actionNext" 或者在代码中 mUserEdit.setImeOptions(EditorInfo.IME_ACTION_NEXT);

接下来设置回车按键的监听事件 setOnEditorActionListener

    et1.setOnEditorActionListener(mOnEditorActionListener);
    // ......
    private TextView.OnEditorActionListener mOnEditorActionListener = new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            Log.d(TAG, "actionId: " + actionId);
            Log.d(TAG, "event:    " + event);
            return false;
        }
    };

如果onEditorAction返回true,表示消费调这个事件。

上面的actionId对应的是android.view.inputmethod.EditorInfo中的常量。

    public static final int IME_ACTION_UNSPECIFIED = 0x00000000;
    public static final int IME_ACTION_NONE = 0x00000001;
    public static final int IME_ACTION_GO = 0x00000002;
    public static final int IME_ACTION_SEARCH = 0x00000003;
    public static final int IME_ACTION_SEND = 0x00000004;
    public static final int IME_ACTION_NEXT = 0x00000005;
    public static final int IME_ACTION_DONE = 0x00000006;
    public static final int IME_ACTION_PREVIOUS = 0x00000007;