情形1: 如图
解释:
进入页面是左图的效果, 但是当连续多次点击enter键, 就出现了右图的效果, 即edit出现了换行 , 但是一般来说账号密码这些页面的Edit只需要一行就足够了 , 所以出现这种情形用户体验是很糟糕的
解决方案:
在EditText的布局中, 添加一个属性即可
android:maxLines="1"
情形2:
还是上图, 假如在其他情形下, edit可以输出多行, 但是不需要点击enter产生换行,而是exit自身根据判断字数是否进行换行,那么上面的解决方案不能解决问题, 而需要我们动态的判断, 我们拿到edit的对象进行监听
/***
* setOnEditorActionListener(),并不是在我们点击EditText的时候触发,
* 也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘
* enter键才触发,如果我们手动修改默认返回值为true,就可以屏蔽enter功能
* 根据观察,微信的输入操作就是这样的,不管有无内容,都禁止enter换行,如果存在输入内容,
* 点击enter发送出去,然后将edit置空, 这其实就是我们根据需求进行的业务操作
*/
private void initEdit3() {
final TextView tv = (TextView) findViewById(R.id.custom_view_ac_text);
final EditText edit3 = (EditText) findViewById(R.id.custom_view_ac_edit3);
edit3.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
//如果要自己消耗该点击事件的话就返回true,否则返回false
if (!TextUtils.isEmpty(edit3.getText())) {
edit3.setSelection(edit3.getText().length());//保持光标在输入框最后
//tv显示edit的内容
if (TextUtils.isEmpty(tv.getText())) {
tv.setText(edit3.getText().toString().trim());
} else {
tv.append("," + edit3.getText().toString().trim());
}
edit3.setText("");
}
return true;//修改默认值为true,自己消费该事件
}
});