问问题
1609 次
2 回答
2
我发现最好使用单个 for 循环和答案。
另请注意,将源传递给 SpannableStringBuilder 构造函数以便从源复制跨度非常重要。如果你不这样做,那么事情就会变得不稳定。
@Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
SpannableStringBuilder ret;
if (source instanceof SpannableStringBuilder) {
ret = (SpannableStringBuilder)source;
} else {
ret = new SpannableStringBuilder(source);
}
for (int i = end - 1; i >= start; i--) {
char currentChar = source.charAt(i);
char currentChar = source.charAt(i);
int ascii = currentChar;
if (ascii > 127) {
ret.delete(i, i+1);
toast = mUtility.showToast("Invalid non-Ascii Character", Toast.LENGTH_SHORT);
}
}
return ret;
}
于 2013-05-07T22:34:25.823 回答
1
编辑:
我认为问题在于您要返回整个字符串,而您应该只返回该字符的替换。filter()
每当文本更改时运行,并且不一定替换EditText
. 您需要注意这一点,因此您最终不会将整个字符串推到字符应该去的地方。
这个问题是相关的(只是用非ASCII代替非字母数字),并且那里的答案被广泛接受,所以你应该能够用它来得到你想要的。
对令人困惑的答案/删除事情感到抱歉。我在离开家之前就回答了。几分钟后,我意识到我的逻辑有一个巨大的缺陷,所以我跳上手机删除了它。我讨厌尝试在手机上输入完整的答案,所以只需要稍等片刻。
于 2012-10-19T18:43:14.220 回答