首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入筛选器对所有键盘的工作方式不一样。

输入筛选器对所有键盘的工作方式不一样。
EN

Stack Overflow用户
提问于 2020-07-20 10:17:48
回答 1查看 403关注 0票数 2

我想要创建一个输入过滤器,以添加一个车辆号码。我想实现这个视频演示,但是我的代码并不适用于所有的键盘。下面代码中的"source“变量值并不是所有键盘的相同值。

编辑:

例如,假设用户希望输入“MH19”。如果用户按"1",那么在“”中,"source“变量的值显示"1”,而在"SwiftKey键盘“中,"source”变量的值显示"MH1“。

SpacesInputFilter.java

代码语言:javascript
复制
    public class SpacesInputFilter implements InputFilter {

    private final int max;
    private final int[] spaces;
    private final char space;

    public SpacesInputFilter(int max, int[] spaces, char space) {
        this.max = max;
        this.spaces = spaces;
        this.space = space;
    }

    @Override
    public CharSequence filter(CharSequence source,
                               int start,
                               int end,
                               Spanned dest,
                               int dstart,
                               int dend) {
        if (dest != null && dest.toString().trim().length() > max) {
            return null;
        }
        if (source.length() == 1 && contains(dstart, spaces) && source.charAt(0) != space) {
            return space + source.toString();
        }

        // handle copy-paste case
        int spacesCount = 0;
        if (start == 0 && source.length() == end) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < source.length(); i++) {
                char symbol = source.charAt(i);
                if (contains(i + spacesCount, spaces) && symbol != space) {
                    spacesCount++;
                    sb.append(space);
                }
                sb.append(symbol);
            }
            return sb.toString();
        }
        //unhandled: partial copy-paste
        return null; // keep original
    }

    private boolean contains(int i, int[] array) {
        for (int j: array) {
            if (j == i) {
                return true;
            }
        }
        return false;
    }
}

MainActivity.java

代码语言:javascript
复制
 edtVehicleNumber.setFilters(new InputFilter[] {
            new InputFilter.LengthFilter(13),
            new SpacesInputFilter(13, new int[]{2, 5, 8}, ' '),
    });
EN

回答 1

Stack Overflow用户

发布于 2020-07-20 12:08:52

我已经解决了这个问题。实际上,问题是,软件键盘在用户输入时自己做一些活动。这些活动旨在改进经验。我们需要以某种方式禁用这些活动,以便获得原始输入。

所以这对我有用,

代码语言:javascript
复制
        editText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62993238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档