2016-08-01 2 views
5

Я пытаюсь реализации простой логики, чтобы принимать только символы между a-z и A-Z программнымAndroid принимают только символы между Аз и AZ

Простое решение:

<EditText 
    android:id="@+id/LanguageText" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:inputType="text" 
    android:digits="@string/app_lan" /> 

В strings.xml:

<string name="app_lan">abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ</string> 

Но я хочу реализовать это программно

username.addTextChangedListener(new TextWatcher() { 
    public void afterTextChanged(Editable s) { 
     if (s.toString().length() > 0) { 
      /* if char is not between a-z and A-Z then return*/ 
      if ((int) s.toString().charAt(0) < 65 && (int) s.toString().charAt(0) > 90 || (int) s.toString().charAt(0) < 97 && (int) s.toString().charAt(0) > 122) { 
       return; 
      }else{ 
       /* Accept character */ 
      } 
     } 
    } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
    } 
}); 
+0

сначала нужно преобразовать символ в значение ASCII после того как ваша логика будет осуществлять .. – comeback4you

+0

есть какие-либо конкретные причины, почему вы должны реализовать программно? – HendraWD

ответ

11

Вы должны использовать InputFilters

edittext.setFilters(new InputFilter[] { 
    new InputFilter() { 
     public CharSequence filter(CharSequence src, int start, 
       int end, Spanned dst, int dstart, int dend) { 
      if(src.toString().matches("[a-zA-Z ]+")){ 
       return src; 
      } 
      return ""; 
     } 
    } 
}); 
+0

Спасибо, хорошо. позвольте мне после задержки в какой-то момент принять то, что отличается от 'addTextChangedListener' для реализации этого решения? –

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