各类溜达着的时候看到以下代码,感受挺爽。相对于在Edittext的TextWatcher里处理,独立控制的可重用性更好,同时下降TextWatcher工做的复杂度。java
import android.text.InputFilter; public static void setupLengthFilter(EditText inputText, final Context context, final int maxLength , final boolean showToast) { // Create a new filter InputFilter.LengthFilter filter = new InputFilter.LengthFilter( maxLength) { public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { if (source != null && source.length() > 0 && (((dest == null ? 0 : dest.length()) + dstart - dend) == maxLength)) { if (showToast) { Toast.makeText(context, context.getString(R.string.not_add_more_text), Toast.LENGTH_SHORT).show(); } return ""; } return super.filter(source, start, end, dest, dstart, dend); } }; // Find exist lenght filter. InputFilter[] filters = inputText.getFilters(); int length = 0; for (int i = 0; i < filters.length; i++) { if (!(filters[i] instanceof InputFilter.LengthFilter)) { length++; } } //Only one length filter. InputFilter[] contentFilters = new InputFilter[length + 1]; for (int i = 0; i < filters.length; i++) { if (!(filters[i] instanceof InputFilter.LengthFilter)) { contentFilters[i] = filters[i]; } } contentFilters[length] = filter; inputText.setFilters(contentFilters); }