1

У меня есть EditText, в котором я хочу разрешить только алфавиты и номера любого языка. Я пробовал с различными android:inputType и android:digits в XML.EditText допускает только алфавиты, цифры всех языков

Я попытался с множеством TextWatcher к EditText, в котором 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. Но я не нашел лучшего способа.

Пожалуйста, дайте мне знать, если есть способ сделать это.

+0

Я нашел решение в http://stackoverflow.com/questions/41953259/edittext-cursor-coming-to-start-for-every-letter-when-clear-text, но когда я вставляю текст, курсор перемещается до конца – Srikanth

ответ

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 = "~#^|$%*[email protected]/()-'\":;,?{}=!$^';,?×÷<>{}€£¥₩%~`¤♡♥_|《》¡¿°•○●□■◇◆♧♣▲▼▶◀↑↓←→☆★▪:-);-):-D:-(:'(:O 1234567890"; 
     if (source != null && blockCharacterSet.contains(("" + source))) { 
      return ""; 
     } 
     return null; 
    } 
}; 

editText.setFilters(new InputFilter[] { filter }); 
+0

спасибо за ответ josedlujan. В этом случае мы должны отображать все специальные символы. нам тоже нужно подумать о смайликах. – Srikanth

+0

Также, копируя, вставляя текст в edittext, он не ограничивает эти заблокированные символы. – Srikanth

 Смежные вопросы

  • Нет связанных вопросов^_^