4

我的想法是在达到最大字符限制时View设置一个错误。EditText有没有关于这个事件的回调,或者可能有另一种方法来实现这个效果?提前致谢。

4

4 回答 4

11

EditText 中的 maxLength 属性实际上是一个 InputFilter,您可以自己编写并从代码中提供。

可以看InputFilter.LengthFilter的实现,基本没有溢出就返回null。(见http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/text/InputFilter.java#InputFilter.LengthFilter.filter%28java。 lang.CharSequence%2Cint%2Cint%2Candroid.text.Spanned%2Cint%2Cint%29 )

您可以为 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
                editText.setError("Overflow");
            }
            return res;
        }
    }
});
于 2012-11-13T09:05:59.420 回答
5

您可以使用编辑文本的setError

editText.addTextChangedListener(new TextWatcher() {         
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void afterTextChanged(Editable s) {
            if(s.length() > max)
                editText.setError("Error");
        }
    });
于 2012-11-13T09:03:51.150 回答
1

我认为最好的解决方案是使用TextChangedListener并检查 EditText 测试的长度与您的限制。

于 2012-11-13T09:04:45.303 回答
0

谢谢但是-

editText.setFilters() not editText.setInputFilters()
于 2013-08-05T10:23:08.753 回答