EditText 經(jīng)常會有限制輸入字符長度的需求,限制輸入長度的方法有三種:
1. 在XML 文件中設(shè)置
android:maxLength="50"
2. 通過InputFilter
EditText editText = (EditText)findViewById(R.id.edit);
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)});
實際上在XML 中設(shè)置,最后也是通過設(shè)置InputFilter 實現(xiàn)的。LengthFilter 只是實現(xiàn)了字符串長度的限制,如果我們想要其他限制,比如根據(jù)字符串的字節(jié)數(shù)等,可以自己實現(xiàn)InputFilter 接口來實現(xiàn)相應(yīng)功能。
3. 為EditText設(shè)置 TextWatcher 監(jiān)聽
我們可以自定義一個類,實現(xiàn)TextWatcher 接口,監(jiān)聽EditText 的文本變化,手動對輸入文本進行截斷,例如下面(注:示例代碼,未經(jīng)過嚴(yán)密測試):
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);
}
}
}
上面代碼也可實現(xiàn)輸入長度限制。
總結(jié):
如果是一種固定要求的輸入框,可以直接在XML 中寫,如果想要動態(tài)控制,甚至實現(xiàn)更多的控制功能,建議使用InputFilter 或 TextWatcher,如果只是為了限制輸入建議使用InputFilter。