【发布时间】:2011-03-14 13:24:53
【问题描述】:
在我使用 InputFilter.LengthFilter 为 editText 设置最大字符限制后,有没有办法让 editText 在达到最大字符数后对 onTextChanged 做出反应?如果没有,是否有一种简单的方法可以将最大字符数设置为 editText 并仍然对 onTextChanged 事件做出反应?
【问题讨论】:
标签: android input filter android-edittext
在我使用 InputFilter.LengthFilter 为 editText 设置最大字符限制后,有没有办法让 editText 在达到最大字符数后对 onTextChanged 做出反应?如果没有,是否有一种简单的方法可以将最大字符数设置为 editText 并仍然对 onTextChanged 事件做出反应?
【问题讨论】:
标签: android input filter android-edittext
在 XML 本身中为 EditText 提供以下属性,
android:maxLength="20"
【讨论】:
我遇到了同样的问题,对 SO 的一些研究让我得到了这个解决方案。感谢@njzk2 的出色解决方案。将其发布在这里,以便其他人可以得到答案。
EditText 中的maxLength 属性实际上是一个InputFilter,您可以自己编写并通过代码提供。
可以看InputFilter.LengthFilter的实现,如果没有溢出,基本返回null。 (见link)
对此稍作修改:为InputFilter.LengthFilter 创建一个扩展名,在其中调用super 并将其与null 进行比较,以决定是否需要显示警报。
editText.setInputFilters(new InputFilter[] {
new InputFilter.LengthFilter(max) {
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
CharSequence res = super.filter(source, start, end, dest, dstart, dend);
if (res != null) { // Overflow
Toast.makeText(this,"OVERFLOW!",Toast.LENGTH_SHORT).show();
}
return res;
}
}
});
【讨论】: