有时需要对编辑框EditText限制输入的最大字符数或中文的个数,如下是一段不错的参考代码。
可参考此代码如 法炮制出自己想要的逻辑功能。
myEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int count, int after) {
int mTextMaxlenght = 0;
Editable editable = myEditText.getText();
String str = editable.toString().trim();
//得到最初字段的长度大小,用于光标位置的判断
int selEndIndex = Selection.getSelectionEnd(editable);
// 取出每个字符进行判断,如果是字母数字和标点符号则为一个字符加1,
//如果是汉字则为两个字符
for (int i = 0; i < str.length(); i++) {
char charAt = str.charAt(i);
//32-122包含了空格,大小写字母,数字和一些常用的符号,
//如果在这个范围内则算一个字符,
//如果不在这个范围比如是汉字的话就是两个字符
if (charAt >= 32 && charAt <= 122) {
mTextMaxlenght++;
} else {
mTextMaxlenght += 2;
}
// 当最大字符大于40时,进行字段的截取,并进行提示字段的大小
if (mTextMaxlenght > 40) {
// 截取最大的字段
String newStr = str.substring(0, i);
myEditText.setText(newStr);
// 得到新字段的长度值
editable = myEditText.getText();
int newLen = editable.length();
if (selEndIndex > newLen) {
selEndIndex=editable.length();
}
// 设置新光标所在的位置
Selection.setSelection(editable, selEndIndex);
Toast.makeText(MainActivity.this,"最大长度为40个字符或20个汉字!",Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}