EditText限制输入类型为英数字并限制长度

来源:互联网 发布:rayfile for mac下载 编辑:程序博客网 时间:2024/05/21 09:58

方法一:

EditText标签下增加以下属性:

android:maxLength="18"android:digits="1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"

方法二:

通过TextWatcher实现,更加灵活。

首先,自定义一个TextWatcher:

public static class IDNumberTextWatcher implements android.text.TextWatcher {        /**         * This method is called to notify you that, within <code>s</code>,         * the <code>count</code> characters beginning at <code>start</code>         * are about to be replaced by new text with length <code>after</code>.         * It is an error to attempt to make changes to <code>s</code> from         * this callback.         */        @Override        public void beforeTextChanged(CharSequence s, int start, int count, int after) {        }        /**         * This method is called to notify you that, within <code>s</code>,         * the <code>count</code> characters beginning at <code>start</code>         * have just replaced old text that had length <code>before</code>.         * It is an error to attempt to make changes to <code>s</code> from         * this callback.         */        @Override        public void onTextChanged(CharSequence s, int start, int before, int count) {                    }        /**         * This method is called to notify you that, somewhere within         * <code>s</code>, the text has been changed.         * It is legitimate to make further changes to <code>s</code> from         * this callback, but be careful not to get yourself into an infinite         * loop, because any changes you make will cause this method to be         * called again recursively.         * (You are not told where the change took place because other         * afterTextChanged() methods may already have made other changes         * and invalidated the offsets.  But if you need to know here,         * you can use {@link Spannable#setSpan} in {@link #onTextChanged}         * to mark your place and then look up from here where the span         * ended up.         */        @Override        public void afterTextChanged(Editable s) {            String temp = s.toString();            Log.d(TAG, "temp=" + temp);            if (!TextUtils.isEmpty(temp)) {                if (temp.length() <= 18) {                    String tem = temp.substring(temp.length() - 1, temp.length());                    char[] temC = tem.toCharArray();                    int mid = temC[0];                    // Number                    if(mid>=48&&mid<=57){                        return;                    }                    // Upper case                    if(mid>=65&&mid<=90){                        return;                    }                    // Lower case                    if(mid>=97&&mid<=122){                        return;                    }                }                else {    Log.d(TAG, "current input length is over 18"); } s.delete(temp.length()-1, temp.length());     } else { Log.d(TAG, "current input is null");     } }}
然后在EditText的对象上设置该TextWatcher即可:

idNumEt.addTextChangedListener(new IDNumberTextWatcher());



                                             
0 0
原创粉丝点击