@Test public void canSetAndGetInputFilters() throws Exception { final InputFilter[] expectedFilters = new InputFilter[]{new InputFilter.LengthFilter(1)}; textView.setFilters(expectedFilters); assertThat(textView.getFilters()).isSameAs(expectedFilters); }
import java.lang.reflect.Field; // [...] public static int getMaxLengthForTextView(TextView textView) { int maxLength = -1; for (InputFilter filter : textView.getFilters()) { if (filter instanceof InputFilter.LengthFilter) { try { Field maxLengthField = filter.getClass().getDeclaredField("mMax"); maxLengthField.setAccessible(true); if (maxLengthField.isAccessible()) { maxLength = maxLengthField.getInt(filter); } } catch (IllegalAccessException e) { Log.w(filter.getClass().getName(), e); } catch (IllegalArgumentException e) { Log.w(filter.getClass().getName(), e); } catch (NoSuchFieldException e) { Log.w(filter.getClass().getName(), e); } // if an Exception is thrown, Log it and return -1 } } return maxLength; }
public class PlainEditText extends EditText { public PlainEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); addFilter(this, new PlainTextInputFilter()); } private void addFilter(TextView textView, InputFilter filter) { InputFilter[] filters = textView.getFilters(); InputFilter[] newFilters = Arrays.copyOf(filters, filters.length + 1); newFilters[filters.length] = filter; textView.setFilters(newFilters); } private static class PlainTextInputFilter implements InputFilter { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { return stripRichText(source, start, end); } private CharSequence stripRichText(CharSequence str, int start, int end) { // ... } } }
e.printStackTrace(); data.put("FiltersCount", tv.getFilters() != null ? tv.getFilters().length : 0); data.put("FreezesText", tv.getFreezesText()); data.put("Hint", String.valueOf(tv.getHint()));