1. 程式人生 > >AndroidEditText校驗 只輸入數字或特定字元

AndroidEditText校驗 只輸入數字或特定字元

EditText的layout設定大家都知道就不累贅了,這裡主要說怎麼設定輸入限制。

EditText的屬性裡面已經封裝好了相關的設定,上一篇文章裡面也提到了,不熟悉的可以去檢視上一篇EditText屬性大全,這裡著重講輸入限制的屬性:

android:digits="1234567890.+-*/%\n()"
限制輸入框中只能輸入自己定義的這些字串 如果輸入其它將不予以顯示
android:phoneNumber="true"
限制輸入框中只能輸入手機號碼
android:password="true"
限制輸入框中輸入的任何內容將以"*"符號來顯示
android:hint="預設文字"
輸入內容前預設顯示在輸入框中的文字
android:textColorHint="#FF0000"
設定文字內容顏色
android:enabled="false"
設定輸入框不能被編輯

如果還有一些特殊的限制,比如我做一個專案只能輸入數字,且輸入0之後再輸入1,則只顯示1,這就需要單獨去進行設定了,也非常的簡單。

給EditText新增一個監聽事件,當檢測到裡面的內容變化以後,根據需求,修改相關的內容就可以了。

使用EditText的addTextChangedListener(TextWatcher watcher)方法對EditText實現監聽,TextWatcher是一個介面類,所以必須實現TextWatcher裡的抽象方法:

當EditText裡面的內容有變化的時候,觸發TextChangedListener事件,就會呼叫TextWatcher裡面的抽象方法。

  1. public class MainActivity extends Activity { 
  2.  private EditText text; 
  3.     String str; 
  4.  @Override
  5.  public void onCreate(Bundle savedInstanceState) { 
  6.  super.onCreate(savedInstanceState); 
  7.         setContentView(R.layout.main); 
  8.         text = (EditText)findViewById(R.id.text); 
  9.         text.addTextChangedListener(textWatcher); 
  10.     } 
  11.  private TextWatcher textWatcher = new TextWatcher() { 
  12.  @Override
  13.  public void afterTextChanged(Editable s) {    
  14.  // TODO Auto-generated method stub   
  15.             Log.d("TAG","afterTextChanged--------------->");  
  16.         }  
  17.  @Override
  18.  public void beforeTextChanged(CharSequence s, int start, int count, 
  19.  int after) { 
  20.  // TODO Auto-generated method stub
  21.             Log.d("TAG","beforeTextChanged--------------->"); 
  22.         } 
  23.  @Override
  24.  public void onTextChanged(CharSequence s, int start, int before,    
  25.  int count) {    
  26.             Log.d("TAG","onTextChanged--------------->");   
  27.             str = text.getText().toString(); 
  28.  try 
  29.  //if ((heighText.getText().toString())!=null) 
  30.                 Integer.parseInt(str); 
  31.             } catch (Exception e) { 
  32.  // TODO: handle exception
  33.             } 
  34.         }                   
  35.     };
  36. }

該方法可以監聽到Edittext的變化,我在onTextChanged裡面監聽s值得變化,然後做修改以後再setText到EditText裡面,不過這時候經常會遇見游標跑到最前面的情況,很噁心,隨意每次setText的時候都需要用ev.setSelection(str.length())去重新設定游標位置為str字串的最後。