请不要急于将此邮件标记为“重复”。
我找不到合适的例子。
假设我想限制edittext中的字符{。
让我们考虑一下我的代码的一些变体。我只在模拟器上试过。

       editName.addTextChangedListener(new TextWatcher() {
        public void afterTextChanged(Editable s) {
            String txt=s.toString();
            int len=txt.length();
            toastDebug("len="+myIntToStr(len));
            if (len>0) {
                try {
                    int pos=txt.indexOf("{");
                    if (pos>=0) s.replace(pos,pos+1,"");
                }
                catch(Exception e) {}
            }
        }

如果我快速地输入{,就会导致stackoverflow崩溃。
假设我慢慢地键入“abcd{{{{{{”。第一个视图看起来不错,edittext中没有“{”。
但是如果我键入backspace,它不会删除“abcd”,而是删除那些不可见的“{{{{”
我试图在“aftertextchanged”中更改编辑文本。下面的代码再次导致stackoverflower错误。
            public void afterTextChanged(Editable s) {
            String txt=s.toString();
            int len=txt.length();
            if (len>0) {
                try {
                   editName.setText(txt)
                   or
                   s.clear
                   s.append(txt)
                }
                catch(Exception e) {}
            }
        }

在我键入{后,许多带有code like this的示例都会清除我的edittext。
我把代码修改如下:
    editName.setFilters(new InputFilter[] { filterName });

    private InputFilter filterName = new InputFilter() {
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        if (source==null) return null;
            return source.toString().replace("{","");
    }
};

现在它工作了。但是我的android:maxlength=“25”不工作。
可以键入任意数量的字符。
所以我很困惑如何在edittext中限制简单字符。
有什么想法吗?谢谢!

最佳答案

您可以通过在小部件上设置EditText并插入以下逻辑来限制用户可以在TextWatcher中输入的字符:

// we are interested in this callback
@Override
public void afterTextChanged(Editable s) {
    String result = s.toString().replaceAll("\\{", "");
    if (!s.toString().equals(result)) {
         edit.setText(result); // "edit" being the EditText on which the TextWatcher was set
         edit.setSelection(result.length()); // to set the cursor at the end of the current text
    }
}

\\是必需的(对于其他字符也是如此),因为{字符在模式中有特殊的含义。

10-04 11:30
查看更多