首页 > 代码库 > 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 输入限制(软键盘限制)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。