3

我的 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:digits 有效。

4

10 回答 10

11
final EditText editText = (EditText)findViewById(R.id.editText1_in_row);


        InputFilter filter = new InputFilter() { 
            boolean canEnterSpace = false;

            public CharSequence filter(CharSequence source, int start, int end,
                    Spanned dest, int dstart, int dend) {

                if(editText.getText().toString().equals(""))
                {
                    canEnterSpace = false;
                }

                StringBuilder builder = new StringBuilder();

                for (int i = start; i < end; i++) { 
                    char currentChar = source.charAt(i);

                    if (Character.isLetterOrDigit(currentChar) || currentChar == '_') {
                        builder.append(currentChar);
                        canEnterSpace = true;
                    }

                    if(Character.isWhitespace(currentChar) && canEnterSpace) {
                        builder.append(currentChar);
                    }


                }
                return builder.toString();          
            }

        };


        editText.setFilters(new InputFilter[]{filter});

并从您的 EditText 中删除此属性

android:digits="_,qwertzuiopasdfghjklyxcvbnm,QWERTYUIOPASDFGHJKLZXCVBNM,0123456789"

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

于 2013-10-22T09:37:05.860 回答
6

使用 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;
            }
        };
    }

无需在 XML 上编写 android:digits 属性

删除此行

android:digits="_,qwertzuiopasdfghjklyxcvbnm,QWERTYUIOPASDFGHJKLZXCVBNM,0123456789"
于 2016-10-19T12:58:27.157 回答
1

这对我有用

 android:inputType="textPersonName"
 android:digits= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_-!@#$%^*()"
于 2019-07-26T10:11:47.393 回答
0

为什么你不能使用 editText.getText().trim(); 使用 EditText 数据时的函数

于 2013-10-22T07:02:25.253 回答
0

如果要过滤 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});

详情看这里

于 2013-10-22T07:14:29.253 回答
0

用这个。如果起始 Position 处的字符是空格,则将 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

                }
            });
于 2013-10-22T07:22:34.440 回答
0

这是我在 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)});
}
于 2019-10-29T06:39:10.360 回答
0

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

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

        }
于 2018-04-10T11:09:03.593 回答
0
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890.,_-!@#$()+=><:;?"
于 2019-08-14T05:11:32.957 回答
0

https://stackoverflow.com/users/2868352/abhishek-v答案略有不同。

public class NoInitialSpaceFilter implements InputFilter {
    @Override
    public CharSequence filter(final CharSequence source, final int start, final int end, final Spanned dest, final int dstart, final int dend) {
        if (dstart == 0) {
            for (int i = start; i < end; i++) {
                if (Character.isSpaceChar(source.charAt(i))) {
                    return "";
                }
            }
        }
        return null;
    }
}

用法:

editText.setFilters(new InputFilter[]{new NoInitialSpaceFilter});
于 2016-01-14T14:33:21.930 回答