我们在开发过程,经常会遇到EditText 设置可输入内容长度,但是发现java代码没有set方法,通过源码,我们发现InputFilter的妙用所在。
在TextView中我们发现maxLength默认值为-1,并且当mxLength大于等于0才会设置LengthFilter
if (maxlength >= 0) {
setFilters(new InputFilter[] { new InputFilter.LengthFilter(maxlength) });
} else {
setFilters(NO_FILTERS);
}
接下来,我们查看一下 InputFilter.LengthFilter 中代码
/**
* This filter will constrain edits not to make the length of the text
* greater than the specified length.
*/
public static class LengthFilter implements InputFilter {
@UnsupportedAppUsage
private final int mMax;
public LengthFilter(int max) {
mMax = max;
}
public CharSequence filter(CharSequence source, int start, int end, Spanned dest,
int dstart, int dend) {
int keep = mMax - (dest.length() - (dend - dstart));
if (keep <= 0) {
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);
}
}
/**
* @return the maximum length enforced by this input filter
*/
public int getMax() {
return mMax;
}
}
那么我们EditText可以:
editText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(maxlength) });来实现,java代码设置 最大输入内容长度。
InputFilter可以实现很多功能。