在Android里面可以通过setOnEditorActionListener监听回车达到屏蔽回车按键的目的。它在API的TextView(EditText的父类),谷歌大意这样描述它:它是一个特殊的监听器,用于监听一个Enter键,如果设备具有物理键盘,点击Enter建不会插入回车符,不过按着alt键可以修复。
好吧,看来这个方法挺古老的,都考虑到物理按键了,不过通过测试如果设备不具有物理键盘,这个方法还是可以屏蔽掉软键盘的回车键的,如果设备具有物理按键就无法屏蔽软键盘的回车键了,哎,一直在找解决方案。
实现setOnEditorActionListener接口的onEditorAction ()这个方法有三个参数:
- TextView v 被监听的对象。
- int actionId 动作标识符,如果值等于EditorInfo.IME_NULL,则回车键被按下。
- KeyEvent event 如果由输入键触发,这是事件;否则,这是空的(比如非输入键触发是空的)。
看一下方法:
// 监听回车键
mMuchLineEt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
/**
*
* @param v 被监听的对象
* @param actionId 动作标识符,如果值等于EditorInfo.IME_NULL,则回车键被按下。
* @param event 如果由输入键触发,这是事件;否则,这是空的(比如非输入键触发是空的)。
* @return 返回你的动作
*/
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Log.e("多行监听", actionId + "\t" + KeyEvent.KEYCODE_ENTER);
return event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER);
}
});
可以看到我们对event 进行了非空判断,如果不是用于按键触发的回车,这个值是空的,比如在EditText的属性里加上这句话 android:singleLine=”true”就为空,或者设备带有物料按键它也会报空的,然后通过event.getKeyCode() 获取你按下的键码,和KeyEvent.KEYCODE_ENTER对比可判断你是否点击的回车键。从而达到屏蔽回车按键的目的,不过带有物理键盘的设备就得另说了。
当让也可以这样写:
return actionId == EditorInfo.IME_NULL;
效果是一样的。