2016-08-01 14 views
5

Próbuję wykonawczych prostą logikę, aby przyjmować tylko znaki między a-z i A-Z programowoAndroid akceptuje tylko znaki między AZ i AZ

Prostym rozwiązaniem jest:

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

W Strings.xml:

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

Ale chcę wdrożyć to programowo

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

najpierw trzeba przekonwertować char do wartości ascii po logika wdroży .. – comeback4you

+0

jest jakiś konkretny powód dlaczego trzeba zaimplementować go programowo? – HendraWD

Odpowiedz

11

Należy użyć 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

Dzięki, ok. pozwól mi po chwili opóźnić akceptuję to, co różni się tym z 'addTextChangedListener' za wdrożenie tego rozwiązania? –

Powiązane problemy