Android - 限制EditText仅接受波斯语字符

4

我希望限制我的edittext只接受波斯语字符。例如:ض، ص، ث، ق,ف等字符。

我尝试使用xml digit,但它没有生效。

如何实现这一要求?


只是一个想法[不完全确定],你能否尝试一下?
  1. 在您的XML中放置数字属性(您已经完成了这个步骤)
  2. 在Java类中,添加这两行代码:editText.setInputType(InputType.TYPE_CLASS_TEXT); editText.setKeyListener(DigitsKeyListener.getInstance("YOUR_FARSI_CHARACTERS"));
- Solaiman Hossain
你能否发布你的XML代码以供参考? - EKN
2个回答

1
你可以使用InputFilter来约束EditText。InputFilters 可以附加到可编辑的文本中,以限制对其所做的更改。
InputFilter filter = new InputFilter() {
        public CharSequence filter(CharSequence source, int start, int end, 
            Spanned dest, int dstart, int dend) {
            for (int i = start; i < end; i++) {
                String text = String.valueOf(source.charAt(i));
                Pattern RTL_CHARACTERS = Pattern.compile("[\u0600-
                \u06FF\u0750-\u077F\u0590-\u05FF\uFE70-\uFEFF]");
                Matcher matcher = RTL_CHARACTERS.matcher(text);
                if (matcher.find()) {
                    return "";  // it's Persian
                }
            }
            return null;
        }
    };

使用此过滤器检测波斯语/波斯字符并将其限制为edittext。使用以下代码将此过滤器设置为您的EditText: editText.setFilters(new InputFilter[]{filter}); 这将限制波斯语/波斯字符。

0

这些代码也可以帮助:

    InputFilter nameFilter = new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            for (int i = start; i < end; i++) {
                if (Character.isLetterOrDigit(source.charAt(i))) { // if digit!

                    String blockCharacterSet = getString(R.string.all_fa_words) + ' ';

                    if (blockCharacterSet.contains(String.valueOf(source.charAt(i)))) {
                        edtNameEdit.setHintTextColor(getResources().getColor(R.color.materialWhite));
                        edtNameEdit.setHint(getString(R.string.name_lastname));
                        return null;
                    } else {
                        edtNameEdit.setHintTextColor(getResources().getColor(R.color.sPink));
                        edtNameEdit.setHint(getString(R.string.name_lastname) + ' ' + getString(R.string.must_fa));
                        return edtNameEdit.getText().toString();
                    }
                } else {
                    return null;
                }
            }
            return null;
        }
    };
    edtNameEdit.setFilters(new InputFilter[]{nameFilter});
    edtNameEdit.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接