使用EditText
默认为我们提供了maxLines
的属性,实现了可视范围内的行数限制。如果希望字数超过指定行数不再输入,需要自行监听文字的变化。这里修改afterTextChanged(Editable s)
,使得文字到达最大行数后不再处理输入的内容。实现如下:
mEditText.addTextChangedListener(new TextWatcher() {
@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) {
int lines = mEditText.getLineCount();
if (lines > MAX_LINES) {
String string = s.toString();
// 获取当前输入位置
int cursorStart = mEditText.getSelectionStart();
int cursorEnd = mEditText.getSelectionEnd();
if (cursorStart == cursorEnd && cursorStart < string.length() && cursorStart >= 1) {
// 输入位置在字符串中间,前后拼接
string = string.substring(0, cursorStart - 1) + string.substring(cursorStart);
} else {
// 输入位置在末尾则去掉最后一个字符串
string = string.substring(0, s.length() - 1);
}
mEditText.setText(string);
mEditText.setSelection(mEditText.getText().length());
}
}
});
网友评论