Android EditText輸入最大值提示功能
有時,我們會對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