最近在做项目的时候,往后台发送数据时报错了,后来发现是因为输入的字符中有换行符导致的,于是就想办法先设置singleLine="true",结果没什么作用,后来查阅edittext的源码,发现其中有一个方法setOnEditorActionListener,这个方法是给文本框添加编辑监听事件,这个看起来没什么用处,但是这个方法有点特别,这个方法的监听时间并不是点击EditText的时候触发,也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘上的回车键才会触发。这个时候明白了吧。我们不是要回车键失效吗?现在只需要当我们按回车键的时候返回false就行了,代码如下: mEtRemark.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { return(event.getKeyCode() == KeyEvent.KEYCODE_ENTER); } });
在这里不知道你们发现问题没,我们的返回结果是true,那么我们为什么要返回true呢?
通过查看源码发现,该方法默认返回的是false,那么Google对该结果是如何规定的呢?在源码最后一行中显示
Returns:Return true if your have consumed the action,else false.
这句话是什么意思呢?
意思就是说如果你要消耗该点击事件的话就返回true,否则返回false。通俗意思就是说返回true代表你已经将该点击事件消化掉了,不会把点击事件产生的结果返回给edittext,而返回false就是代表你没有消耗掉该点击事件,将返回结果传给edittext,然后edittext就会换行了。这种类型的方法有很多,比如事件传递机制TouchEvent等方法。
参考:https://blog.csdn.net/mirror1217/article/details/60766533