溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android EditText限制輸入字符類型的方法總結

發布時間:2020-08-25 06:36:56 來源:腳本之家 閱讀:387 作者:lqh 欄目:移動開發

Android EditText限制輸入字符類型的方法總結

前言:

最近的項目上需要限制EditText輸入字符的類型,就把可以實現這個功能的方法整理了一下:

1、第一種方式是通過EditText的inputType來實現,可以通過xml或者Java文件來設置。假如我要設置為顯示密碼的形式,可以像下面這樣設置:

在xml中

 Android:inputType="textPassword"

在java文件中,可以用 myEditText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
當然,還有更多的其他屬性用來進行輸入設置。

2、第二種是通過android:digits 屬性來設置,這種方式可以指出要顯示的字符,比如我要限制只顯示數字,可以這樣:

   android:digits="0123456789"

如果要顯示的內容比較多,就比較麻煩了,將要顯示的內容依次寫在里面。

3、通過正則表達式來判斷。下面的例子只允許顯示字母、數字和漢字。

public static String stringFilter(String str)throws PatternSyntaxException{   
   // 只允許字母、數字和漢字   
   String  regEx = "[^a-zA-Z0-9\u4E00-\u9FA5]";           
   Pattern  p  =  Pattern.compile(regEx);   
   Matcher  m  =  p.matcher(str);   
   return  m.replaceAll("").trim();   
 }

然后需要在TextWatcher的onTextChanged()中調用這個函數,

@Override 
   public void onTextChanged(CharSequence ss, int start, int before, int count) { 
     String editable = editText.getText().toString(); 
     String str = stringFilter(editable.toString());
     if(!editable.equals(str)){
       editText.setText(str);
       //設置新的光標所在位置 
       editText.setSelection(str.length());
     }
   } 

4、通過InputFilter來實現。

實現InputFilter過濾器,需要覆蓋一個叫filter的方法。

public abstract CharSequence filter ( 
  CharSequence source, //輸入的文字 
  int start, //開始位置 
  int end, //結束位置 
  Spanned dest, //當前顯示的內容 
  int dstart, //當前開始位置 
  int dend //當前結束位置 
);

下面的實現使得EditText只接收字符(數字、字母和漢字)和“-”“_”,Character.isLetterOrDigit會把中文也當做Letter。

editText.setFilters(new InputFilter[] { 
new InputFilter() { 
  public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
 int dend) { 
      for (int i = start; i < end; i++) { 
          if ( !Character.isLetterOrDigit(source.charAt(i)) && !Character.toString(source.charAt(i)) .equals("_") && !Character.toString(source.charAt(i)) .equals("-"))
 { 
              return ""; 
          } 
      } 
      return null; 
  } }); 

另外使用InputFilter還能限制輸入的字符個數,如   

  EditText tv =newEditText(this); 

    int maxLength =10; 

    InputFilter[] fArray =new InputFilter[1]; 

    fArray[0]=new InputFilter.LengthFilter(maxLength); 

    tv.setFilters(fArray);

上面的代碼可以限制輸入的字符數最大為10。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女