有时,我们会对EditText添加最大长度限制,在EditText达到输入上限时阻止继续输入并弹出提示。
这个问题看似简单,但很难处理的完美。
由于EditText无法拦截软件盘事件,常规的通过TextWatcher,OnKeyListener,等方法都会存在一定的问题。经过反复试错,终于发现以下方案:
1.实现一个InputFilter,在InputFilter中判断输入长度,并弹出提示:
public class LengthFilter implements InputFilter {
public LengthFilter(int max) {
mMax = max;
}
@Override
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) {
if (mErrorToast == null) {
mErrorToast = Toast.makeText(ShowDetailCommentActivity.this, R.string.comment_input_overflow,
Toast.LENGTH_SHORT);
}
mErrorToast.show();
return "";
} else if (keep >= end - start) {
return null; // keep original
} else {
keep += start;
if (mErrorToast == null) {
mErrorToast = Toast.makeText(ShowDetailCommentActivity.this, R.string.comment_input_overflow,
Toast.LENGTH_SHORT);
}
mErrorToast.show();
if (Character.isHighSurrogate(source.charAt(keep - 1))) {
--keep;
if (keep == start) {
return "";
}
}
return source.subSequence(start, keep);
}
}
private int mMax;
}
2.将这个InputFilter设置给对应的EditText:
mEditText.setFilters(new InputFilter[] { new LengthFilter(mMaxTextNum) });
作者:xzy2046,转载需注明。博客主页:http://blog.csdn.net/xzy2046