Android编辑文本空间验证

Android编辑文本空间验证,android,android-edittext,Android,Android Edittext,我的android应用程序中有一个Edittext。我不想允许用户输入第一个空格字符..但在输入其他字符后,用户也可以输入空格 <EditText android:id="@+id/editText1_in_row" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="text" android:digits=

我的android应用程序中有一个Edittext。我不想允许用户输入第一个空格字符..但在输入其他字符后,用户也可以输入空格

    <EditText
    android:id="@+id/editText1_in_row"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="text" 
    android:digits="_,qwertzuiopasdfghjklyxcvbnm,QWERTYUIOPASDFGHJKLZXCVBNM,0123456789">

但在这种情况下,用户不能进入空间

我还使用了文本观察程序,但我不需要允许用户在输入文本时作为
android:数字可以工作。

为什么不能使用editText.getText().trim();函数在使用EditText数据时执行。如果要筛选EditText中的输入字符,需要使用InputFilter。下面是一个例子。 //只允许字母或数字

InputFilter filter = new InputFilter() { 
   public CharSequence filter(CharSequence source, int start, int end,
     Spanned dest, int dstart, int dend) {
    for (int i = start; i < end; i++) { 
              if (!Character.isLetterOrDigit(source.charAt(i))) { 
                  return ""; 
              }
          }
    return null;
   } 
        }; 

 EditText text = (EditText)findViewById(R.id.edittext1);
text.setFilters(new InputFilter[]{filter});
InputFilter过滤器=新的InputFilter(){
公共CharSequence筛选器(CharSequence源、int开始、int结束、,
跨越目的地、内部数据起点、内部数据起点){
对于(inti=start;i

有关详细信息,请参见此。如果起始位置的字符是空格,请将textView Text设置为空白

editText1_in_row.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    if (s.length()>0 && s.subSequence(0, 1).toString().equalsIgnoreCase(" ")) {
                        editText1_in_row.setText("");               }

                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void afterTextChanged(Editable s) {
                    // TODO Auto-generated method stub

                }
            });
此代码完全根据您的需要工作。

答案稍有变化


使用InputFilter易于处理输入第一个空格字符忽略

editText上的第一个setFilters()方法

editText.setFilters(new InputFilter[]{ignoreFirstWhiteSpace()});
生成输入过滤器

    // ignore enter First space on edittext
    public InputFilter ignoreFirstWhiteSpace() {
        return new InputFilter() {
            public CharSequence filter(CharSequence source, int start, int end,
                                       Spanned dest, int dstart, int dend) {

                for (int i = start; i < end; i++) {
                    if (Character.isWhitespace(source.charAt(i))) {
                        if (dstart == 0)
                            return "";
                    }
                }
                return null;
            }
        };
    }

只需将用户限制为键入空格,就像其他人在仅开始时所说的那样:

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            String text = createPL.getText().toString();

            //restrict space for first char
            if (text.startsWith(" ")) {
                edittext.setText(text.trim());
            }

        }
这对我有用

 android:inputType="textPersonName"
 android:digits= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_-!@#$%^*()"

android:digits=“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvxyz1234567890.,-!@#$()+=>这是我在EditText中用于名称验证的过滤器。第一个字母大写,而不是空格和特殊字符。完成单词后不允许超过一个空格

public void setNameFilter() {
    InputFilter filter = new InputFilter() {
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        public CharSequence filter(CharSequence source, int start, int end,
                                   Spanned dest, int dstart, int dend) {
            for (int i = start; i < end; i++) {
                if (dend == 0) {
                    if (Character.isSpaceChar(source.charAt(i)) ||
                            !Character.isAlphabetic(source.charAt(i))) {
                        return Constants.Delimiter.BLANK;
                    } else {
                        return String.valueOf(source.charAt(i)).toUpperCase();
                    }
                } else if (Character.isSpaceChar(source.charAt(i)) &&
                        String.valueOf(dest).endsWith(Constants.Delimiter.ONE_SPACE)) {
                    return Constants.Delimiter.BLANK;
                } else if ((!Character.isSpaceChar(source.charAt(i)) &&
                        !Character.isAlphabetic(source.charAt(i)))) {
                    return Constants.Delimiter.BLANK;
                }
            }
            return null;
        }
    };
    editText.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(Constants.Length.NAME_LENGTH)});
}
public void setNameFilter(){
InputFilter筛选器=新的InputFilter(){
@RequiresApi(api=Build.VERSION\u CODES.KITKAT)
公共CharSequence筛选器(CharSequence源、int开始、int结束、,
跨越目的地、内部数据起点、内部数据起点){
for(int i=start;i
text watcher有什么问题?使用regex^[a-zA-Z0-9\]*$检查此链接。这会有所帮助you@PankajKumar我希望用户不能按空格键,因为(android:digits工作),所以文本观察者不会这样做。是的,我可以使用,但我想限制用户(表示如果用户按下第一个字母的按钮,则该字母将不起作用,然后该字母将起作用)我想限制用户不进入第一个空格。此解决方案如何工作请解释否如果我在您的解决方案中使用android:digits..我在键入charters后不能进入空格..编辑了我的答案。请检查我想您不需要引用
editText
来检索文本。您已经拥有了
源代码
参数所需的所有信息R
    // ignore enter First space on edittext
    public InputFilter ignoreFirstWhiteSpace() {
        return new InputFilter() {
            public CharSequence filter(CharSequence source, int start, int end,
                                       Spanned dest, int dstart, int dend) {

                for (int i = start; i < end; i++) {
                    if (Character.isWhitespace(source.charAt(i))) {
                        if (dstart == 0)
                            return "";
                    }
                }
                return null;
            }
        };
    }
android:digits="_,qwertzuiopasdfghjklyxcvbnm,QWERTYUIOPASDFGHJKLZXCVBNM,0123456789"
        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            String text = createPL.getText().toString();

            //restrict space for first char
            if (text.startsWith(" ")) {
                edittext.setText(text.trim());
            }

        }
 android:inputType="textPersonName"
 android:digits= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_-!@#$%^*()"
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890.,_-!@#$()+=><:;?"
public void setNameFilter() {
    InputFilter filter = new InputFilter() {
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        public CharSequence filter(CharSequence source, int start, int end,
                                   Spanned dest, int dstart, int dend) {
            for (int i = start; i < end; i++) {
                if (dend == 0) {
                    if (Character.isSpaceChar(source.charAt(i)) ||
                            !Character.isAlphabetic(source.charAt(i))) {
                        return Constants.Delimiter.BLANK;
                    } else {
                        return String.valueOf(source.charAt(i)).toUpperCase();
                    }
                } else if (Character.isSpaceChar(source.charAt(i)) &&
                        String.valueOf(dest).endsWith(Constants.Delimiter.ONE_SPACE)) {
                    return Constants.Delimiter.BLANK;
                } else if ((!Character.isSpaceChar(source.charAt(i)) &&
                        !Character.isAlphabetic(source.charAt(i)))) {
                    return Constants.Delimiter.BLANK;
                }
            }
            return null;
        }
    };
    editText.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(Constants.Length.NAME_LENGTH)});
}