给别人做网站挣钱吗?,泉州建站哪些公司,山西做网站优势,wordpress 获取最新文章Android EditText限制输入字符的方法总结最近项目要求限制密码输入的字符类型#xff0c; 例如不能输入中文。 现在总结一下EditText的各种实现方式#xff0c; 以比较各种方法的优劣。第一种方式#xff1a; 设置EditText的inputType属性#xff0c;可以通过xml或者Ja…Android EditText限制输入字符的方法总结最近项目要求限制密码输入的字符类型 例如不能输入中文。 现在总结一下EditText的各种实现方式 以比较各种方法的优劣。第一种方式 设置EditText的inputType属性可以通过xml或者Java文件来设置。假如我要设置为显示密码的形式可以像下面这样设置在xml中 Android:inputTypetextPassword在java文件中可以用 ev.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);inputType参数有phone、textPasswrod等等属性 有兴趣的话可以测试一下。第二种 设置EditText的android:digits 属性 这种方式可以指出要支持的字符。比如要限制只能输入数字和字母可以这样android:digits0123456789abcdefghijklmnopqrstuvwxyz。PS吐槽一下写着好累不支持区间操作符~或-第三种 使用TextWather监听EditText的字符变化 当内容改变时删掉不想要的字符。说白了就是用户可以随便按键盘在代码里马上删掉非法字符。 PS 常见的搜索功能输入框就是用TextWatcher监测关键词变化然后查数据并显示出来了。示例代码只能输入字母或者数字 如果要支持其它字符可以修改regEx正则表达式。evPwd (EditText) findViewById(R.id.ev_password);evPwd.addTextChangedListener(new TextWatcher() {Overridepublic void beforeTextChanged(CharSequence charSequence,int i,int i1,int i2) {}Overridepublic void onTextChanged(CharSequence charSequence,int i2) {String editable evPwd.getText().toString();String regEx [^a-zA-Z0-9]; //只能输入字母或数字Pattern p Pattern.compile(regEx);Matcher m p.matcher(editable);String str m.replaceAll().trim(); //删掉不是字母或数字的字符if(!editable.equals(str)){evPwd.setText(str); //设置EditText的字符evPwd.setSelection(str.length()); //因为删除了字符要重写设置新的光标所在位置}}第四种通过InputFilter来实现。实现InputFilter过滤器 需要覆盖一个叫filter的方法。public abstract CharSequence filter (CharSequence source,//输入的文字int start,//开始位置int end,//结束位置Spanned dest,//当前显示的内容int dstart,//当前开始位置int dend //当前结束位置);注意 IntentFilter是个数组 也就是说可以写多个过滤条件下面的实现使得EditText只接收字符(数字、字母)Character.isLetterOrDigit会把中文也当做Letter 所以要在写个正则判断是否中文。evPwd.setFilters(new InputFilter[]{new InputFilter() {Overridepublic CharSequence filter(CharSequence charSequence,Spanned spanned,int i2,int i3) {String regex ^[\u4E00-\u9FA5]$;boolean isChinese Pattern.matches(regex,charSequence.toString());if (!Character.isLetterOrDigit(charSequence.charAt(i)) || isChinese) {return ;}return null;}}});第五种 使用EditText的InputConnection属性限制输入字符。 新建个类继承于EditText并覆盖onCreateInputConnection函数 在xml里使用LimitText替换EditText。public class LimitEditText extends EditText {public LimitEditText(Context context) {super(context);}public LimitEditText(Context context,AttributeSet attrs) {super(context,attrs);}public LimitEditText(Context context,AttributeSet attrs,int defStyleAttr) {super(context,attrs,defStyleAttr);}/*** 输入法* param outAttrs* return*/Overridepublic InputConnection onCreateInputConnection(EditorInfo outAttrs) {return new InnerInputConnecttion(super.onCreateInputConnection(outAttrs),false);}class InnerInputConnecttion extends InputConnectionWrapper implements InputConnection {public mInputConnecttion(InputConnection target,boolean mutable) {super(target,mutable);}/*** 对输入的内容进行拦截** param text* param newCursorPosition* return*/Overridepublic boolean commitText(CharSequence text,int newCursorPosition) {// 只能输入字母或者数字if (!Character.isLetterOrDigit(charSequence.charAt(i)) || isChinese) {return false;}return super.commitText(text,newCursorPosition);}Overridepublic boolean sendKeyEvent(KeyEvent event) {return super.sendKeyEvent(event);}Overridepublic boolean setSelection(int start,int end) {return super.setSelection(start,end);}}}以上是EditText输入限制的所有方法 大家如有疑问请留言或到本站社区讨论感谢阅读希望能帮助到大家谢谢大家对本站的支持总结如果觉得编程之家网站内容还不错欢迎将编程之家网站推荐给程序员好友。本图文内容来源于网友网络收集整理提供作为学习参考使用版权属于原作者。小编个人微信号 jb51ccc喜欢与人分享编程技术与工作经验欢迎加入编程之家官方交流群