InputFilter inputFilter = new InputFilter() {
private static final int MAX_LIMIT = 20;
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
int size = 0;
int length = dest.length();
for(int i = 0; i < length; ++i){
if(VerifyFormat.isChinese(dest.charAt(i))){
size += 2;
}else{
++size;
}
}
length = source.length();
for(int i = 0; i < length; ++i){
if(VerifyFormat.isChinese(source.charAt(i))){
size += 2;
}else{
++size;
}
}
if(size > MAX_LIMIT) {
int i;
for (i = end - 1; i >= start && size > MAX_LIMIT; --i) {
if (VerifyFormat.isChinese(source.charAt(i))) {
size -= 2;
} else {
--size;
}
}
return source.subSequence(start, i + 1);
}
return null;
}
};
mEditNickName.setFilters(new InputFilter[]{inputFilter});
通过inputfilter我们可以自己对EditText中的字符串进行各种限定,我这里的限定是,最长输入为20个长度,中文认为长度为2,一旦超过,就把最新的多出的部分去除。即使通过粘贴得到的也是没有任何问题。在这里我们还可以进行其他各种限定,比如非法字符等等。
这里mEditNickName是我的EditText。
这里inputFilter各种参数的解释 ,source 当前的字符来源串,这里实际上是source的[start, end)部分。
dest是目标串,即我们将改动的串,改动的部分是[dstart, dend)。
这里你可能会觉得某些参数很奇怪, 你想象一下输入框的选中复制粘贴功能就好了。