各類溜達着的時候看到以下代碼,感受挺爽。相對於在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); }