EditText输入filter导致重复的字母

我一直在限制输入到我的edittext这样的;

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); 

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

    编辑 – 这不是很有效。 在一些设备上(看起来像大多数samsungs)重复的字母问题回来了 – 只是稍微少一点。

    我会认真地建议find一种限制输入的不同方法,因为输入filter目前有一些严重的问题。

    我建议如下:

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

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

     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(); } } } 

    XMLEditText中使用它来解决此问题:

     android:inputType="textFilter"