Nia*_*iaz 2 android android-edittext
请不要急于将此消息标记为“重复”。我找不到合适的例子。假设我想限制 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) {}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我快速输入“{”,它会导致“stackOverFlow”崩溃。假设我慢慢输入“abcd{{{{{{{{}”。对于第一个视图,它看起来不错,editText 中没有“{”。但是如果我输入退格,它不会删除“abcd”,它会删除那些不可见的“{{{{{”
我试图更改“afterTextChanged”中的editText。下面的代码再次导致 stackOverflowError。
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) {}
}
}
Run Code Online (Sandbox Code Playgroud)
在我键入“{”后,许多具有此类代码的示例会清除我的 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("{","");
}
};
Run Code Online (Sandbox Code Playgroud)
现在它起作用了。但我的 android:maxLength="25" 不起作用。可以键入任意数量的字符。
所以我很困惑如何限制editText中的简单字符。有任何想法吗?谢谢!
您可以EditText通过TextWatcher在小部件上设置 a并插入以下逻辑来限制用户可以输入的字符:
// 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
}
}
Run Code Online (Sandbox Code Playgroud)
的\\需要(以及其他字符),因为该{字符具有以图案的特殊含义。
| 归档时间: |
|
| 查看次数: |
4223 次 |
| 最近记录: |