2

我有一个 EditText,我想在其中只允许任何语言的字母和数字。我尝试了不同android:inputTypeandroid:digitsXML 格式。

我尝试使用 set TextWatcher 来编辑文本,其中 onTextChanged() 就像

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {

        switch (et.getId()) {
        case R.id.edtMultiLang: {
            et.removeTextChangedListener(watcher2);
            et.setText(s.toString().replaceAll("[^[:alpha:]0-9 ]", ""));
            // et.setText(s.toString().replaceAll("[^A-Za-z0-9 ]", ""));
            et.addTextChangedListener(watcher2);
            break;
        }
        }
    }

这工作正常。但是每当我尝试清除文本时,光标都会移动到每个字母的开头。意味着当我清除一个字母时,光标移动开始。

如果我使用 like android:digits="abcdefghijklmnopqrstuvwxyz1234567890 ",它只允许我输入英文字母和数字。它不允许我输入任何其他语言文本,因为我在这里只给出了与英语相关的字母。但我的要求是允许复制/粘贴其他语言的字母和字母。我希望我们可以通过使用 Patterns、TextWatcher 和 InputFilter 来做到这一点。但是我没有找到更好的方法。

请让我知道是否有任何方法可以做到这一点。

4

1 回答 1

2

您提到的解决问题的选项既简单又快速,如果您使用过滤器,您的代码将如下所示:

public static InputFilter filter = new InputFilter() {
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        String blockCharacterSet = "~#^|$%*!@/()-'\":;,?{}=!$^';,?×÷<>{}€£¥₩%~`¤♡♥_|《》¡¿°•○●□■◇◆♧♣▲▼▶◀↑↓←→☆★▪:-);-):-D:-(:'(:O 1234567890";
        if (source != null && blockCharacterSet.contains(("" + source))) {
            return "";
        }
        return null;
    }
};

editText.setFilters(new InputFilter[] { filter });
于 2017-01-30T12:59:02.573 回答