android开发中,可以使用TextWatcher监听editText中的文字变化
不罗嗦,直接上示例代码,以防忘记:
etComment.addTextChangedListener(new TextWatcher() {
private String textBeforeChanged;
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
Editable editable = etComment.getText();
if (getWordCount(editable.toString()) > 1000) {
// 获取光标所在位置
int selEndIndex = Selection.getSelectionEnd(editable);
// 截取新字符串
StringBuffer sB = new StringBuffer(editable.toString());
while (getWordCount(sB.toString()) > 16) {
sB.deleteCharAt(sB.length() - 1);
}
String newStr = sB.toString();
etComment.setText(sB.toString());
int newLen = newStr.length();
// 旧光标位置超过字符串长度
if (selEndIndex > newLen) {
selEndIndex = newStr.length();
}
// 设置新光标所在的位置
editable = etComment.getText();
Selection.setSelection(editable, selEndIndex);
}
}
private int getWordCount(String s) {
// TODO Auto-generated method stub
s = s.replaceAll("[^\\x00-\\xff]", "**");
int length = s.length();
return length;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
textBeforeChanged = s.toString();
}
@Override
public void afterTextChanged(Editable s) {
if (TextUtils.isEmpty(s.toString())) {
}
tvTextNum.setText(String.valueOf(500 - s.length()));
}
});