根据需求,对昵称进行20个字符的限制,一个汉字占两个
字符,一个字母占一个字符,当已经输入19个字符的时候,
不可以输入汉字,但是还可以输入一个字母。如果输入超过
20个字符,进行截取20个字符。以下是网上大神的工具类,
我这边根据自己需求修改。(其中的20个可以随意的修改)
1.这是个工具类
public class NameLengthFilter implements InputFilter {
int MAX_EN;// 最大英文/数字长度 一个汉字算两个字母
String regEx = "[\\u4e00-\\u9fa5]"; // unicode编码,判断是否为汉字
public NameLengthFilter(int mAX_EN) {
super();
MAX_EN = mAX_EN;
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
int destCount = dest.toString().length()
+ getChineseCount(dest.toString());
int sourceCount = source.toString().length()
+ getChineseCount(source.toString());
String name = "";
int count = 0;
int i = 0;
if (destCount + sourceCount > MAX_EN) {
if (destCount < MAX_EN) {
while (!(destCount + count >= MAX_EN)) {
++i;
name = source.subSequence(0, i).toString();
count = name.toString().length()
+ getChineseCount(name.toString());
if (destCount + count > MAX_EN) {
--i;
}
}
return i == 0 ? "" : source.subSequence(0, i).toString();
}
return "";
} else {
return source;
}
}
private int getChineseCount(String str) {
int count = 0;
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
while (m.find()) {
//楼下的朋友提供更简洁的代谢
count++;
}
return count;
}
}
2.在需要的地方只需要添加上这两句即可(其中的et_hotel_user_name是你自己的edittext):
InputFilter[] filters = {new
NameLengthFilter(20)};et_hotel_user_name.setFilters(filters);
网友评论