4
4

2 回答 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 回答