setContent.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
normalCharNumber = 0;
chineseCharNunber = 0;
int mTextMaxlenght = 0;
Editable editable = etContent.getText();
String str = editable.toString().trim();
//得到最初字段的长度大小,用于光标位置的判断
int selEndIndex = Selection.getSelectionEnd(editable);
// 取出每个字符进行判断,如果是字母数字和标点符号则为一个字符加1,
//如果是汉字则为两个字符
for (int j = 0; j < str.length(); j++) {
char charAt = str.charAt(j);
//32-122包含了空格,大小写字母,数字和一些常用的符号,
//如果在这个范围内则算一个字符,
//如果不在这个范围比如是汉字的话就是两个字符
if (charAt >= 32 && charAt <= 122 && !isContainChinese(charAt + "")) {
mTextMaxlenght++;
normalCharNumber++;
} else {
chineseCharNunber++;
mTextMaxlenght += 2;
}
// 当最大字符大于40时,进行字段的截取,并进行提示字段的大小
if (mTextMaxlenght > 20) {
// 截取最大的字段
String newStr = str.substring(0, i);
etContent.setText(newStr);
// 得到新字段的长度值
editable = etContent.getText();
int newLen = editable.length();
if (selEndIndex > newLen) {
selEndIndex = editable.length();
}
// 设置新光标所在的位置
Selection.setSelection(editable, selEndIndex);
}
}
}
@Override
public void afterTextChanged(Editable editable) {
tvContent.setText("文本中中文字符数为:"+chineseCharNunber+",非非中文字符数为:"+normalCharNumber);
}
});
//是否包含中文
public static boolean isContainChinese(String str) {
Pattern p = Pattern.compile("[\\u4e00-\\u9fa5]");
Matcher m = p.matcher(str);
if (m.find()) {
return true;
}
return false;
}