关于EditText点击enter键会出现换行的解决方式

时间:2024-03-29 19:34:13
情形1: 如图

关于EditText点击enter键会出现换行的解决方式      关于EditText点击enter键会出现换行的解决方式
解释: 
进入页面是左图的效果, 但是当连续多次点击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,自己消费该事件
        }
    });