自动删除EditText文本的前导空格?

时间:2018-01-24 11:09:35

标签: java android android-edittext textwatcher android-textwatcher

描述

我正在开发一个我有注册页面的应用程序。 在注册页面内,我通过获取用户的全名和手机号码进行注册。

问题

在编辑文本中获取用户的全名时,用户有时会在输入空格键之前输入他/她的名字。

我需要你在键入任何文本之前禁用空格键白色用户开始键入他的名字我想启用空格键。这样用户就可以在他/她的中间名和姓氏之间输入空格。

我尝试了什么?

回答

我在编辑文本中使用文本观察器。

user_name.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                inputLayoutname.setError(null);
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                System.out.println(TAG+" s :"+s+ " start :"+start+" Before : "+before+" Count: "+count);
                String str = s.toString();

                if(str.length() > 0 && str.contains(" "))
                {
                    user_name.setError("Space is not allowed");
                    user_name.setText("");
                }
            }

            @Override
            public void afterTextChanged(Editable s) {    

                if (user_name.getText().length() > 0)
                    inputLayoutname.setError(null);
            }
        });

我在实施此代码时出现了什么问题?

当用户先按下时会突然自动移除空间。 但是当用户尝试在全名之间输入空格时,它会再次移除所有文本并显示空的编辑文本。

screen 1 while entering only space enter image description here

Here I am entering my Name and want to enter last name or middle name of space enter image description here

Here when I am entering space after my first name enter image description here

4 个答案:

答案 0 :(得分:2)

首先,试着了解他想要做什么

他正试图阻止用户输入前导空格而不是输入文字后。

他不想修剪用户名

更新您的代码
if(str.length() > 0 && str.contains(" "))
                {
                    user_name.setError("Space is not allowed");
                    user_name.setText("");
                }

if(str.equals(" "))
                {
                    user_name.setError("Leading Space is not allowed");
                    user_name.setText("");
                }

它会阻止用户在名字前输入任何空格

答案 1 :(得分:1)

使用此trim()方法删除此类空间..

String str = s.toString().trim();

答案 2 :(得分:1)

使用 trim() 方法删除额外空间

<强> user_name.getText().toString().trim()

并删除

if(str.length() > 0 && str.contains(" "))
                {
                    user_name.setError("Space is not allowed");
                    user_name.setText("");
                }
来自onTextChanged

要阻止用户输入空格,请在onTextChanged

上添加此内容
if(str.equals(" "))
                {
                    user_name.setError("Leading Space is not allowed");
                    user_name.setText("");
                }

答案 3 :(得分:0)

试试这个,检查start == 0,它不允许用户在名字

之前添加空格
@Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(start == 0 && s.toString().contains(" ")){
                user_name.setText("");
            }
        }