天天看點

Android EditText禁止輸入中文字元《1》

 隻允許EditText輸入數字或者email格式字元是非常簡單的(詳見API文檔)。

要實作隻允許輸入自定的數字字元也是很容易的(詳見API文檔,setKeyListener(KeyListener) 和setFilters (InputFilter[] filters) )。

但是要限制隻能輸入指定的字母字元就非常的困難。

發現,android:digits的參數是一個字元串,沒有更多的語義檢查,是以想到内部處理很可能僅是簡單的檢查,輸入的字元是否在給定的字元串中(要我設計,我就這樣做)。嘗試着給它指定帶有英文字元的參數,發現果然如此。萬幸,萬幸!

在layout.xml裡

Xml代碼  

Android EditText禁止輸入中文字元《1》
  1. <EditText  
  2.       android:id="@+id/register_userName_editText"  
  3.       style="@style/register_editText_style"  
  4.       android:digits="@string/register_name_digits"  
  5.       android:textColor="@drawable/register_edit_text_textColor"  
  6.       android:textColorHint="@drawable/register_hint_text_textColor"  
  7.       android:hint="@string/register_name_hint_text"  
  8.  />  

在string.xml裡

Xml代碼  

Android EditText禁止輸入中文字元《1》
  1. <string name="register_name_digits">  
  2.   ._0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLIMNOPQRSTUVWXYZ  
  3. </string>  

 另外:

Java代碼  

Android EditText禁止輸入中文字元《1》
  1. editText01.addTextChangedListener(new TextWatcher() {  
  2.     String tmp = "";  
  3.     String digits = "abcdef";  
  4.     @Override  
  5.     public void onTextChanged(CharSequence s, int start, int before, int count) {  
  6.     }  
  7.     @Override  
  8.     public void beforeTextChanged(CharSequence s, int start, int count, int after) {  
  9.         tmp = s.toString();  
  10.     }  
  11.     @Override  
  12.     public void afterTextChanged(Editable s) {  
  13.         Log.d(Sample4Main.TAG, "<><>afterTextChanged<><>" + s.toString());  
  14.         String str = s.toString();  
  15.         if(str.equals(tmp)){  
  16.             return;  
  17.         }  
  18.         StringBuffer sb = new StringBuffer();  
  19.         for(int i = 0; i < str.length(); i++){  
  20.             if(digits.indexOf(str.charAt(i)) >= 0){  
  21.                 sb.append(str.charAt(i));  
  22.             }  
  23.         }  
  24.         tmp = sb.toString();  
  25.         editText01.setText(tmp);  
  26.     }  
  27. }); 

繼續閱讀