EditText属性imeOption="actionSend"的使用限制

为了将软键盘的enter键改为发送,实现IM发送消息的目的,需要设置输入框的imeOption

但是只有将EditText的singleLine属性设置为true时,软键盘enter键的文字才会变成“Send”。

通过设置EditText的setOnEditorActionListener方法,来监听软键盘enter点击的事件。但是如果singleLine的属性为false,此时actionId为0(测试机型华为GEM-703L,系统Android 6.0),而不是预期的EditorInfo.IME_ACTION_SEND。

为了在多行输入的情况下,实现发送功能,只能改为ENTER键被按下来处理发送。缺点就是只能实现一种imeOption的操作,且enter键仍显示换行的图标,而不是“send”。

mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {  
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
                    boolean isOK = false;
                //目前输入框需要支持多行输入,此时enter键的内容不会更改,且按下时actionId为0;
                // 注意不同的手机可能有兼容性问题,此时只监听enter键的按下
                //当actionId == XX_SEND
                //或者event.getKeyCode == ENTER 且 event.getAction == ACTION_DOWN时也触发
                //注意,这是一定要判断event != null。因为在某些输入法上会返回null。
                if (actionId == EditorInfo.IME_ACTION_SEND
                        || (event != null && KeyEvent.KEYCODE_ENTER == event.getKeyCode() && KeyEvent.ACTION_DOWN == event.getAction())) {
                    //处理事件=
                    ToastUtil.showShort("点击-->SEND");
                    isOK = true;
                }
                return isOK;
    }
}

希望后续找到更优的处理方案

你可能感兴趣的:(EditText属性imeOption="actionSend"的使用限制)