我是靠谱客的博主 无辜发夹,最近开发中收集的这篇文章主要介绍android string 过滤,Android 字符串过滤器InputFilter详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

概述

InputFilter是系统提供的一个接口,里面只有一个方法filter(),用于过滤输入/插入的字符串,返回值为CharSequence。 一般都是通过判断语句来过滤字符串,在这里 InputFilter 是另外一种实现方式。

实现

代码

/******************************* 输入框关联 *********************************/

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;

}

}

};

Log

/*******************************输入********************************/

09-09 09:30:18.977 10843-10843/zp.example.zptext I/System.out: source ==我 start=====0 end======1 dest==== dstart===0 dend==0

09-09 09:30:21.873 10843-10843/zp.example.zptext I/System.out: source ==喜欢 start=====0 end======2 dest====我 dstart===1 dend==1

09-09 09:30:26.817 10843-10843/zp.example.zptext I/System.out: source ==湖畔 start=====0 end======2 dest====我喜欢 dstart===3 dend==3

09-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==6

09-09 09:33:22.341 10843-10843/zp.example.zptext I/System.out: source == start=====0 end======0 dest====我喜欢湖畔 dstart===4 dend==5

09-09 09:33:27.733 10843-10843/zp.example.zptext I/System.out: source == start=====0 end======0 dest====我喜欢湖 dstart===3 dend==4

09-09 09:33:30.269 10843-10843/zp.example.zptext I/System.out: source == start=====0 end======0 dest====我喜欢 dstart===2 dend==3

09-09 09:33:31.485 10843-10843/zp.example.zptext I/System.out: source == start=====0 end======0 dest====我喜 dstart===1 dend==2

09-09 09:33:32.777 10843-10843/zp.example.zptext I/System.out: source == start=====0 end======0 dest====我 dstart===0 dend==1

使用

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) {

return null;

}

},

/**这里限制输入的长度为5个字母*/

new InputFilter.LengthFilter(5),

/**输入小写转换成大写*/

new InputFilter.AllCaps()

};

实例一

// 只要你输入内容都会替换成“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;

}

}

实例二

// 控制不让输入空格,不让输入数字大于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;

}

实例三

// 不让输入框输入内容(禁止输入)

@Override

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

return dest.subSequence(dstart,dend);

}

实例四

类似临摹,输入字符正确则正常输入,不正确则用 x 代替

/*****************************配置******************************/

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) + "×";

}

}

}

实例五

/**只允许输入某些字符*/

et03.setKeyListener(new NumberKeyListener() {

@Override

public int getInputType() {

return InputType.TYPE_MASK_VARIATION;

}

/**这里实现字符串过滤,把你允许输入的字母添加到下面的数组即可!*/

@Override

protected char[] getAcceptedChars() {

return new char[]{'0','1','2','3'};

}

});

实例六

实时格式化金额,三位一断

/*******************************配置************************************/

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;

}

}

};

最后

以上就是无辜发夹为你收集整理的android string 过滤,Android 字符串过滤器InputFilter详解的全部内容,希望文章能够帮你解决android string 过滤,Android 字符串过滤器InputFilter详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部