如何完成 h2>
在相关的实用程序类中声明一个静态方法,接受TextView并返回一个int。
迭代TextView上设置的每个InputFilter,找到一个属于InputFilter.LengthFilter实施的文件。
使用Reflection访问,获取并返回mMax字段的值。
这会给你这样的东西:
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;
}如前所述,如果设置TextView的最大长度的实现发生更改,则会中断。当方法开始抛出时,您将收到有关此更改的通知。即使这样,该方法仍然返回-1,您应该将其作为无限长度处理。