EditText 多行时模拟 IME_ACTION_SEND

EditText 弹出软键盘时,可以给软键盘设置一个对应的 ACTION, 常见的 ACTION有:android:imeOptions="actionSend"android:imeOptions="actionSearch"等。(查看更多 ACTION

目前有个需求:在多行状态下,点击 ACTION,达到 ACTION_SEND 的效果,但是EditText 在设置了多行属性(android:inputType="textMultiLine")后,即使设置了android:imeOptions="actionDone"也不能接收到软键盘对应的 Action,因为在多行状态下,Android 系统会将 Action 按钮自动变成换行,此时如果点击 ACTION_BUTTON,只会变成回车的效果,代码如下:

//多行 无效
mContent.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            //TODO 不能检测到 IME_ACTION_SEND
            handled = true;
        }
        return handled;
    }
});

如果需要检测,则需监听 keyCode,多行状态下 EditText 的 ACTION,则需要通过 keyCode 来判断当前点击的按钮是否为 ACTION_BUTTON,

//生效
mContent.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if(keyCode == 66){ //EditText 为多行时设置 ACTION_SEND 无效,keyCode 66 则为 ACTION 按钮
            //TODO 发送内容
            return true;
        }
        return false;
    }
});

参考:http://stackoverflow.com/questions/2986387/multi-line-edittext-with-done-action-button