为了将软键盘的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;
}
}
希望后续找到更优的处理方案