EditText只允许使用字母,所有语言的数字

时间:2017-01-30 12:43:59

标签: android android-edittext multilingual android-textwatcher input-filter

我有一个EditText,其中我只想允许任何语言的字母和数字。我尝试在XML中使用不同的android:inputTypeandroid:digits

我尝试使用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;
        }
        }
    }

这很好用。但每当我试图清除文本时,光标就会开始为每个字母开始。意思是当我清除单个字母时,光标移动开始。

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

如果有任何办法,请告诉我。

1 个答案:

答案 0 :(得分:1)

您提到的解决问题的选项既简单又快捷,如果您使用过滤器,您的代码将是这样的:

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