mChatMsgEt.addTextChangedListener(new TextWatcher() {
private int limit = 200; // 字数限制
private CharSequence beforeSeq; // 保存修改前的值
private int afterStart;
private int afterCount;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (s.length() + (after-count) > limit) {
beforeSeq = s.subSequence(start, start + count);
toastMsg("不能超过" + limit + "字!");
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (count > before && s.length() > limit) { //如果字符数增加时,且当前字符数超过限制了, 保存原串用于还原
afterStart = start;
afterCount = count;
}
mMsgLimitTv.setText(String.format("%s/" + limit, s.length()));
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() > limit) {
try {
s.replace(afterStart, afterStart + afterCount, beforeSeq);
} catch (IndexOutOfBoundsException e) {
Log.d(TAG, Log.getStackTraceString(e));
}
}
}
});