当前位置: 首页 > 知识库问答 >
问题:

编辑文本输入过滤器导致重复的字母

宰父疏珂
2023-03-14

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

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

现在,这在现有的Android键盘上运行良好,但问题是在替代键盘上(来自Google play),它不禁用自动更正,因此我再次遇到重复字符的问题。有人遇到过这个问题吗/知道如何解决吗?

共有2个答案

成和悌
2023-03-14

在XML中的EditText中使用它来解决此问题:

android:inputType="textFilter"
孙和安
2023-03-14

编辑-这不太管用。在一些设备上(看起来像大多数三星),重复字母问题再次出现,只是频率稍低。

我强烈建议找到一种不同的方法来限制输入,因为输入过滤器目前存在一些严重的问题。

我建议如下:

  • 使用Android:数字 xml 属性
  • 在需要时检查编辑文本的内容,而不是键入的内容
  • 你可以玩文本观察器,但我发现这是无效的 - 如果你找到一个使用文本观察器的工作解决方案,请让我知道。

我想出问题了——这是我最后用的

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();
    }
}
}
 类似资料:
  • 我正在尝试实现一个编辑文本,将输入限制为仅 Alpha 字符 [A-Za-z]。 我从本文中的InputFilter方法开始。当我键入“a%”时,文本消失,如果我按退格键,文本为“a”。我尝试过过滤器函数的其他变体,比如使用正则表达式只匹配[a-Za-z],有时会看到疯狂的行为,比如重复字符,我会键入“a”,然后键入“b”,再键入“aab”,然后再键入“c”,再得到“aabaabc”,然后按退格键

  • 我正在开发一个Android聊天应用程序。一切运作良好,但除了一件事;我想设置一个布局的可见性消失,然后设置一个不同的布局可见时,用户开始输入编辑文本,就像在WhatsApp上实现的。但是我似乎想不明白。任何帮助都将不胜感激 基本上,我想做的是设置一个布局的可见性,该布局包含一个图像按钮,用于将图像上载到gone,然后显示一个布局,该布局包含一个图像按钮,用于在用户开始键入时将edittext中的

  • 我正在尝试实现一个仅将输入限制为大写字符[A-Z0-9]和数字。 我从某篇文章开始使用InputFilter方法。但我在三星Galaxy Tab 2上遇到了一个问题,但在模拟器或Nexus 4上没有。 问题是这样的: 当我键入“A”时,文本显示为“A”很好 现在,当我键入“B”时,文本应该是“AB”,但它给了我“AAB”,这看起来很奇怪 简而言之,它重复字符 以下是我正在使用此代码的代码: 文件代

  • 我一直有一些来自EditText的奇怪行为的问题。setSelect,我希望你们都能帮忙! 我正在开发的应用程序有一个搜索字段,需要让它的行为非常类似于浏览器的搜索栏。例如,如果用户键入“fo ”,我们希望EditText自动完成“foobar ”,并突出显示自动完成的“obar”文本,以便在自动完成的文本与用户想要键入的内容不匹配时,用户可以很容易地替换它。 为了实现这一点,我设置了一个带有Te

  • 我有以下输入-窗体-控件: 但是如果我像上面那样使用我的regex,我可以输入'、'或‘。符号。正确的正则表达式是什么?

  • 我正在使用设计库中新的TextInputLayout。我可以让它显示并改变浮动标签的颜色。不幸的是,它不会将文本改为大写。 我不想更改我的字符串.xml,因为我只想让这个标签是大写的。我尝试过在布局,样式和编程方式中更改文本AllCaps,但是EditText提示的情况始终与字符串完全相同.xml。 下面是我的TextInputLayout和EditText的XML 下面是我为TextInputL