EditText 最大字符数限制

EditText 经常会有限制输入字符长度的需求,限制输入长度的方法有三种:

1. 在XML 文件中设置

android:maxLength="50"

2. 通过InputFilter

EditText editText = (EditText)findViewById(R.id.edit);
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)});

实际上在XML 中设置,最后也是通过设置InputFilter 实现的。LengthFilter 只是实现了字符串长度的限制,如果我们想要其他限制,比如根据字符串的字节数等,可以自己实现InputFilter 接口来实现相应功能。

3. 为EditText设置 TextWatcher 监听

我们可以自定义一个类,实现TextWatcher 接口,监听EditText 的文本变化,手动对输入文本进行截断,例如下面(注:示例代码,未经过严密测试):

EditText editText = findViewById(R.id.edit); 
editText.addTextChangedListener(new MyTextWatcher(editText, 10));

private class MyTextWatcher implements TextWatcher { 
        private EditText editText; 
        private int maxCount; 
 
        MyTextWatcher(EditText editText, int maxCount) { 
            this.editText = editText; 
            this.maxCount = maxCount; 
        } 
 
        @Override 
        public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
 
        } 
 
        @Override 
        public void onTextChanged(CharSequence s, int start, int before, int count) { 
 
        } 
 
        @Override 
        public void afterTextChanged(Editable s) { 
 
            if (s.length() > maxCount) { 
                editText.setText(s.subSequence(0, maxCount)); 
                Selection.setSelection(editText.getText(), maxCount); 
            } 
        } 
    }

上面代码也可实现输入长度限制。

总结:

如果是一种固定要求的输入框,可以直接在XML 中写,如果想要动态控制,甚至实现更多的控制功能,建议使用InputFilter 或 TextWatcher,如果只是为了限制输入建议使用InputFilter。

你可能感兴趣的:(EditText 最大字符数限制)