Edittext添加自定义过滤器

来源:互联网 发布:淘宝购物津贴有什么用 编辑:程序博客网 时间:2024/05/21 15:40
以限制字符长度为例    private class LengthFilter implements InputFilter {        private final int mMax;        public LengthFilter(int max) {            //限制字符最大长度            mMax = max;        }        /**         * @param source 将插入的字符         *               * @param start 将插入的字符开始位         *               * @param end 将插入的字符结束位         *               * @param dest 已经插入的字符         *               * @param dstart 将插入原有字符的开始位         *               * @param dend 将插入原有字符的结束位         *               * @return         */        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {            String trim = dest.toString().trim();            //去除空格            int keep;            //计算去除空格后的文字长度            if (source.toString().trim().length() != 0) {                int i = dest.toString().indexOf(trim);                keep = mMax - (dest.length() - i + 1);            } else {                if (dest.subSequence(0, dstart).toString().trim().length() == 0 || dest.subSequence(dstart, dest.length()).toString().trim().length() == 0) {                    keep = mMax - trim.length();                } else {                    keep = mMax - trim.length() - 1;                }            }            //判断字符长度是否符合限制要求 return""代表行限制不允许插入 return null代表不进行限制            if (keep <= 0) {                ToastUtils.show(getString(R.string.title_length_eighteen));                return "";            } else if (keep >= end - start) {                return null;// keep original            } else { //判断是否是特殊字符                keep += start;                if (Character.isHighSurrogate(source.charAt(keep - 1))) {                    --keep;                    if (keep == start) {                        return "";                    }                }                return source.subSequence(start, keep);            }        }    }    //    在代码中引用该规则 //获取edittext中原有的过滤规则     InputFilter[] filters = edPostTitle.getFilters();    //因为他是一个数组无法增加它的大小就重新定义一个数组进行添加    InputFilter[] filters1 = new InputFilter[filters.length + 1]; for(    int i = 0;    i<filters.length;i++)    {        filters1[i] = filters1[i];    }    filters1[filters1.length -1]=new    LengthFilter(18); //最后将过滤插入到edittext中     edPostTitle.setFilters(filters1);}