微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我一直在限制输入到我的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)重复的字母问题回来了 – 只是稍微不那么频繁.

我会认真地建议找到一种限制输入的不同方法,因为输入过滤器目前有一些严重的问题.

我建议如下:

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

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

InputFilter() {
@Override
public CharSequence filter(CharSequence source,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();
    }
}
}

原文地址:https://www.jb51.cc/android/430849.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐