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() >= limit && after>count){//如果当前字符数大于等于限制数,且字符数要增加时,保存原串用于还原
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 (java.lang.IndexOutOfBoundsException e){
Log.d(TAG, Log.getStackTraceString(e));
}
}
}
});mChatMsgEt.addTextChangedListener(new TextWatch