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