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="_,qwertzuiopasdfghjklyxcvbnm,QWERTYUIOPASDFGHJKLZXCVBNM,0123456789">

但在这种情况下,用户无法进入空间。

我也使用过 Text Watcher ,但我不需要在输入文本时允许用户,因为 android:digits 可以工作。

原文由 Vibhor Bhardwaj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 464
2 个回答
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"

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

原文由 Abhishek V 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 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"

原文由 Parth Vora 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题