閱讀249 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android EditText禁止輸入中文字符

 

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

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

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

/**

InputFilter[] ifs = {new InputFilter.LengthFilter(10),new DigitsKeyListener(true,true)};
editText01.setFilters(ifs);

**/

 

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

 

 

在layout.xml裏

Xml代碼 複製代碼 收藏代碼
  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.  />  
<EditText
      android:
      
      android:digits="@string/register_name_digits"
      android:textColor="@drawable/register_edit_text_textColor"
      android:textColorHint="@drawable/register_hint_text_textColor"
      android:hint="@string/register_name_hint_text"
 />

 

在string.xml裏

 

Xml代碼 複製代碼 收藏代碼
  1. <string name="register_name_digits">  
  2.   
  3.   ._0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLIMNOPQRSTUVWXYZ   
  4.   
  5. </string>  
    <string name="register_name_digits">

      ._0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLIMNOPQRSTUVWXYZ

    </string>

  

 

 

 另外:

 

 

Java代碼 複製代碼 收藏代碼
  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.        
  12.     @Override  
  13.     public void afterTextChanged(Editable s) {   
  14.         Log.d(Sample4Main.TAG, "<><>afterTextChanged<><>" + s.toString());   
  15.            
  16.         String str = s.toString();   
  17.         if(str.equals(tmp)){   
  18.             return;   
  19.         }   
  20.            
  21.         StringBuffer sb = new StringBuffer();   
  22.         for(int i = 0; i < str.length(); i++){   
  23.             if(digits.indexOf(str.charAt(i)) >= 0){   
  24.                 sb.append(str.charAt(i));   
  25.             }   
  26.         }   
  27.         tmp = sb.toString();   
  28.         editText01.setText(tmp);   
  29.     }   
  30. });   

最後更新:2017-04-02 06:51:55

  上一篇:go java.lang.OutOfMemoryError: Java heap space 解決方法
  下一篇:go 接口中常見的時間處理方法