请不要急于将此邮件标记为“重复”。
我找不到合适的例子。
假设我想限制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
}
}
\\
是必需的(对于其他字符也是如此),因为{
字符在模式中有特殊的含义。