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。