首页 > 学院 > 开发设计 > 正文

InputFilter全解

2019-11-09 14:20:31
字体:
来源:转载
供稿:网友
注:InputFilter主要是对输入的文本进行过滤的,里面只有一个filter方法
1234567891011121314151617181920212223242526272829303132333435363738394041/*********************************************输入框关联*********************************************************/ et02.setFilters(filter); /*********************************************调用*********************************************************/     PRivate InputFilter[] filter = new InputFilter[] {            new InputFilter() {                /**                 * @param source 输入的文字                 * @param start 输入-0,删除-0                 * @param end 输入-文字的长度,删除-0                 * @param dest 原先显示的内容                 * @param dstart 输入-原光标位置,删除-光标删除结束位置                 * @param dend  输入-原光标位置,删除-光标删除开始位置                 * @return                 */                @Override                public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {                     System.out.println("source  =="+ source+"  start====="+start+"   end======"+end+"   dest===="+dest+"  dstart==="+dstart+"  dend=="+dend);                     return null;                }            }    };  /*********************************************输入*********************************************************/09-09 09:30:18.977 10843-10843/zp.example.zptext I/System.out: source  ==我  start=====0   end======1   dest====  dstart===0  dend==009-09 09:30:21.873 10843-10843/zp.example.zptext I/System.out: source  ==喜欢  start=====0   end======2   dest====我  dstart===1  dend==109-09 09:30:26.817 10843-10843/zp.example.zptext I/System.out: source  ==湖畔  start=====0   end======2   dest====我喜欢  dstart===3  dend==309-09 09:31:10.265 10843-10843/zp.example.zptext I/System.out: source  ==的  start=====0   end======1   dest====我喜欢湖畔  dstart===5  dend==5 /*********************************************删除*********************************************************/09-09 09:33:08.089 10843-10843/zp.example.zptext I/System.out: source  ==  start=====0   end======0   dest====我喜欢湖畔的  dstart===5  dend==609-09 09:33:22.341 10843-10843/zp.example.zptext I/System.out: source  ==  start=====0   end======0   dest====我喜欢湖畔  dstart===4  dend==509-09 09:33:27.733 10843-10843/zp.example.zptext I/System.out: source  ==  start=====0   end======0   dest====我喜欢湖  dstart===3  dend==409-09 09:33:30.269 10843-10843/zp.example.zptext I/System.out: source  ==  start=====0   end======0   dest====我喜欢  dstart===2  dend==309-09 09:33:31.485 10843-10843/zp.example.zptext I/System.out: source  ==  start=====0   end======0   dest====我喜  dstart===1  dend==209-09 09:33:32.777 10843-10843/zp.example.zptext I/System.out: source  ==  start=====0   end======0   dest====我  dstart===0  dend==1
注:InputFilter类的使用
1234567891011121314151617181920212223private InputFilter[] filter = new InputFilter[] {            new InputFilter() {                /**                 * @param source 输入的文字                 * @param start 输入-0,删除-0                 * @param end 输入-文字的长度,删除-0                 * @param dest 原先显示的内容                 * @param dstart 输入-原光标位置,删除-光标删除结束位置                 * @param dend  输入-原光标位置,删除-光标删除开始位置                 * @return                 */                // 不让输入框输入内容                @Override                public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {                    return null;                }             },            /**这里限制输入的长度为5个字母*/            new InputFilter.LengthFilter(5),            /**输入小写转换成大写*/            new InputFilter.AllCaps()    };
实例一、
123456789      // 只要你输入内容都会替换成“I LOVE YOU”,删除 - 正常删除      @Override       public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {              if (end > 0){                   return "I LOVE YOU";              }else {                   return null;              }        }
实例二、
123456// 控制不让输入空格,不让输入数字大于13位(解决手机号输入问题)@Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {       if(source.equals(" ") || source.toString().contentEquals("/n") || dstart == 13)return "";        else return null; }
实例三、
1234       // 不让输入框输入内容(禁止输入)        @Override        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {        return dest.subSequence(dstart,dend);
实例四、类似临摹,输入字符正确则正常输入,不正确则用 x 代替
1234567891011121314151617181920212223242526272829303132333435/*****************************配置************************************/private final String str = "Hello,Android!"; et03.setFilters(new InputFilter[]{ new MyInputFilter(str) }); /*****************************代码实现************************************/ public class MyInputFilter implements InputFilter {        String str = null;         public MyInputFilter(String str) {            this.str = str;        }         @Override        public CharSequence filter(CharSequence src, int start, int end, Spanned dest, int dstart, int dend) {             String ch = null;             if (dest.length() < str.length()) {                ch = str.substring(dstart + start, dstart + end);            else {                return dest.subSequence(dstart, dend);            }             if (ch.equals(src)) {                Toast.makeText(TextWatchActivity.this"match", Toast.LENGTH_SHORT).show();                return dest.subSequence(dstart, dend) + src.toString();            else {                Toast.makeText(TextWatchActivity.this"mismatch", Toast.LENGTH_SHORT).show();                return dest.subSequence(dstart, dend) + "×";            }        }     }
实例五、
1234567891011121314 /**只允许输入某些字符*/        et03.setKeyListener(new NumberKeyListener() {             @Override            public int getInputType() {                return InputType.TYPE_MASK_VARIATION;            }             /**这里实现字符串过滤,把你允许输入的字母添加到下面的数组即可!*/            @Override            protected char[] getAcceptedChars() {                return new char[]{'0','1','2','3'};            }        });
实例六、实时格式化金额,三位一断
123456789101112131415161718192021222324252627282930313233/*******************************配置************************************/et03.setFilters(new InputFilter[]{lengthfilter2}); /*******************************实现************************************/ private DecimalFormat myformat = new DecimalFormat("###,###");  //金额的格式     private InputFilter lengthfilter2 = new InputFilter() {        @Override        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {            // 删除等特殊字符,直接返回            // "".equals(source.toString():不添加会出现删除不了内容的情况            if (source.toString() == null || source.toString().contains(".") || "".equals(source.toString())) {                return null;            }             String dValue = dest.toString();            if (dValue != null && dValue.contains(",")) {                dValue = dValue.replace(",""");            }            if (dValue != null && dValue.length() > 2 && !dValue.contains(",")) {                 String newValue = dValue + source;                String amountStr = myformat.format(Double.parseDouble(newValue));                et03.setText("");                et03.setText(amountStr);                et03.setSelection(amountStr.length());                return amountStr;            else {                return null;            }        }    };

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表