首页 > 代码库 > EditView 输入限制(软键盘限制)

EditView 输入限制(软键盘限制)

众所周知EditView有个inputType 属性可以设置输入的类型。

如下设置,则只能输入数字:
android:inputType="number"
但是有时候需要自定义输入限制条件,比如第一位只能是“1”,一共11位,超过11位则无法输入,或者只允许输入小于5以下的数字等,则需要其他设置。Android中有三种方式来设置。

第一种:digits 属性

如下设置为:只能输入0-5之间的数字,且最多11位。
1 <EditText
2         android:id="@+id/etDigits"
3         android:layout_width="match_parent"
4         android:layout_height="wrap_content"
5         android:digits="012345"
6         android:hint="通过digits设置"
7         android:inputType="number"
8         android:maxLength="11" />

 

PS:优点:简单方便;
      缺点:只能设置简单的限制,如果需要设置的比较复杂,如数字字母和某些特定字符则需要在digits中穷举出来。

第二种:TextWatcher设置

此方式也比较灵活,不错的方式。
 1 EditText etTextWatcher = (EditText) findViewById(R.id.etTextWatcher);
 2 etTextWatcher.addTextChangedListener(new EditTextWatcher(etTextWatcher));
 3 /**
 4  * Created by xugang on 2016/6/23.
 5  * 输入监听
 6  */
 7 public class EditTextWatcher implements TextWatcher {
 8     private EditText editText;
 9     public EditTextWatcher(EditText editText) {
10         this.editText = editText;
11     }
12     @Override
13     public void beforeTextChanged(CharSequence s, int start, int count, int after) {
14     }
15     @Override
16     public void onTextChanged(CharSequence s, int start, int before, int count) {
17         if (s != null && s.length() > start) {
18             //输入判断规则
19             if (!RegularUtils.compare(s.toString().trim(), RegularUtils.LIMIT_PHONE_INPUT)) {
20                 editText.setText(s.subSequence(0, s.length() - 1));
21                 editText.setSelection(s.length() - 1);
22             }
23         }
24     }
25     @Override
26     public void afterTextChanged(Editable s) {
27     }
28 }

 

 


第三种:设置Filters,通过正则进行限制

传入正则规则即可,灵活性比较高。
 1 public static final String LIMIT_PHONE_INPUT = "^1\\d{0,10}$";//限制只允许输入首位为1的最多11位的数字
 2 EditView etInputFilter = (EditView)findViewById(R.id.etInputFilter);
 3 etInputFilter.setFilters(new EditInputFilter(LIMIT_PHONE_INPUT));
 4 /**
 5  * Created by xugang on 2016/6/22.
 6  * EditView过滤器
 7  */
 8 public class EditInputFilter implements InputFilter {
 9     //
10     private String regular;
11     public EditInputFilter(String regular) {
12         this.regular = regular;
13     }
14     @Override
15     public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
16         if (regular == null)
17             return source;
18         if (dstart == 0 && dend == 0 && TextUtils.isEmpty(source))
19             return null;
20         if (dstart == dend) {
21             //输入
22             StringBuilder builder = new StringBuilder(dest);
23             if (builder.append(source).toString().matches(regular)) return source;
24             else return "";
25         }
26         return source;
27     }
28 }

 

 

EditView 输入限制(软键盘限制)