自动删除 EditText 任何文本的前导 space?

Auto remove leading space of any text of EditText?

描述

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

问题

在编辑文本中获取用户全名时,有时用户会在输入 his/her 名称之前按 space 栏。

我需要你在输入任何文本之前禁用 space-bar 键 白色用户开始输入他的名字 我想启用 space-bar 键。这样用户就可以在 his/her Middle name 和 Last name 之间输入 space。

我试过什么?

回答

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

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);
            }
        });

我在执行这段代码时遇到了什么问题?

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

screen 1 while entering only space

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

Here when I am entering space after my first name

使用此 trim() 方法删除 space 像这样..

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

使用trim()方法去掉多余的space

user_name.getText().toString().trim().

并删除

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

来自你的onTextChanged

要防止用户输入 space,请将此添加到您的 onTextChanged

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

首先,试着理解他想做什么

他试图阻止用户在 space 前输入而不是在输入文本后输入。

他不想trim用户名

更新您的代码
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("");
                }

它将阻止用户在名称

前键入任何 space

试试这个,检查是否 start == 0,它将不允许用户在名称前添加空格

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