EditText输入过滤器导致重复的字母

时间:2013-04-23 19:57:30

标签: android android-edittext android-input-filter

我一直在限制输入我的编辑文本;

InputFilter filter = new InputFilter() { 
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            String output = "";
            for (int i = start; i < end; i++) {
                if (source.charAt(i)!='~'&&source.charAt(i)!='/') {
                    output += source.charAt(i); 
                }
            } 
            return output;
        }
    };

但是,使用此方法的任何人都知道,当它与自动更正和退格键混合时会导致重复字符。为了解决这个问题,我从键盘上删除了自动纠正条;

Edittect.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

现在这在股票安卓键盘上工作正常,但问题是在替代键盘上(来自谷歌播放)它不会禁用自动更正,因此我遇到了重复字符的问题。有没有人遇到这个/知道如何解决它?

1 个答案:

答案 0 :(得分:4)

编辑 - 这不太有用。在一些设备上(看起来像大多数samsungs)重复的字母问题回来了 - 只是稍微不那么频繁。

我会认真推荐找到一种限制输入的不同方式,因为输入过滤器目前存在一些严重的问题。

我建议如下:

  • 使用android:digits xml属性
  • 在需要时检查edittext的内容,而不是在
  • 中输入
  • 你可以和文本观察者一起玩,但我发现效果不佳 - 如果你找到一个使用文本观察器的工作解决方案,请告诉我。

我想出了问题 - 这就是我最后使用的

InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
        Spanned dest, int dstart, int dend) {

    if (source instanceof SpannableStringBuilder) {
        SpannableStringBuilder sourceAsSpannableBuilder = (SpannableStringBuilder)source;
        for (int i = end - 1; i >= start; i--) { 
            char currentChar = source.charAt(i);
             if (currentChar=='/' || currentChar=='~') {    
                 sourceAsSpannableBuilder.delete(i, i+1);
             }     
        }
        return source;
    } else {
        StringBuilder filteredStringBuilder = new StringBuilder();
        for (int i = 0; i < end; i++) { 
            char currentChar = source.charAt(i);
            if (currentChar != '~'|| currentChar != '/') {    
                filteredStringBuilder.append(currentChar);
            }     
        }
        return filteredStringBuilder.toString();
    }
}
}