我可以使用android:数字只允许一个空格吗?

时间:2016-06-07 18:31:42

标签: android android-edittext

在我的EditText中,我需要限制除字母,数字和单个空间之外的所有字符。我试图添加到XML:

android:digits="abcdefghijklmnopqrstuvwxyz1234567890 " 

我仍然可以输入多个空格。如何更改此设置并允许用户输入不超过1个空格?

6 个答案:

答案 0 :(得分:0)

您必须以编程方式检查它。但请保留您拥有的XML内容。那仍然很好。只需检查空格数。试试这个:

    String str = myEditText.toString();
    int first = str.indexOf(" ");
    boolean noneOrOneSpace = (first != -1) ? str.indexOf(" ", first + 1) : true;

然后你需要应用它来在editText的textChangedListener中使用它。当发生更改然后删除并注意到第二个空格然后删除EditText中的最后一个字符

答案 1 :(得分:0)

在这种情况下,

数字不起作用。

您可以尝试使用TextWatcher,然后将用户输入的所有多个空格替换为单个空格。

例如:

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

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                yourEditText.removeTextChangeListener(this);

                // Uses append() method on edit-text instead of setText()
                // in an order to prevent soft keyboard reset.
                String tempStr = s.toString().substring(0, s.length());
                yourEditText.getText().clear();

                // This line replaces all the multiple spaces with single space.
                tempStr = tempStr.replaceAll("\\s+", " ");

                yourEditText.append(tempStr);
                yourEditText.setSelection(tempStr.length());

                yourEditText.addTextChangedListener(this);
            }

            @Override
            public void afterTextChanged(Editable s) {}
        }); 

答案 2 :(得分:0)

我在输入文字时在StackOverflow和google上搜索了很多,只在名称字段中输入了一个空格

这是可以正常工作的代码段。在文本更改后调用它,在TextWatcher中设置文本时不会陷入无限循环

public void handleSpaceValidation(EditText editText, Editable editable) {
    String s = editText.getText().toString();
    int count = 0;
    loop:
    for (int i = 0; i < editable.length(); i++) {
        if (editable.charAt(i) == ' ') {
            count++;
            if (count > 1) {
                String after = s.trim().replaceAll(" +", " ");
                editText.setText(after);
                editText.setSelection(after.length());
                break loop;
            }


        }
    }
}

希望此帮助:) 编码愉快。

答案 3 :(得分:0)

我想我得到了一个干净的解决方案:

 inputText.addTextChangedListener(new TextWatcher() {

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

            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
            }

            public void afterTextChanged(Editable s) {
                int whiteSpaceCount = 0;
                for (int i = 0; i < s.toString().length(); i++) {
                    if (Character.isWhitespace(s.charAt(i))) {
                        whiteSpaceCount++;
                    }
                    if (whiteSpaceCount > 1 && !Character.isLetter(s.charAt(i))) {
                        s.replace(i, i + 1, "");
                    }else if (!Character.isLetter(s.charAt(i)) && !Character.isWhitespace(s.charAt(i))) {
                        s.replace(i, i + 1, "");
                    }
                }
            }

        });

希望对你有帮助,别忘了在最后显示之前修剪inputText,这样如果用户在开始或结束时输入空格,我们就可以修剪它。

答案 4 :(得分:-1)

数字没有那种类型的力量。您必须为EditText制作自定义过滤器。

答案 5 :(得分:-1)

我已经解决了我的问题,我必须在打字时只允许一个空格。

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

                Log.e("BeforeText", String.valueOf(s));
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                Log.e("OnText", String.valueOf(s));



//
            }

            @Override
            public void afterTextChanged(Editable s) {
                Log.e("AfterText", String.valueOf(s));
                if(editText.getText().toString().length()>1)
                {
                    if(editText.getText().toString()
                            .charAt(editText.getText().toString().length()-1)
                            ==editText.getText().toString()
                            .charAt(editText.getText().toString().length()-2))
                    {
                        String value=editText.getText().toString().substring(0,
                                editText.getText().toString().length()-1);
                        editText.setText(value);
                        editText.setSelection(value.length());
                    }
                }

            }
        });