Android EditText限制文字长度(中文算3字符,英文算1字符)
/**
* 限制输入字符长度 中文算3字符,英文算1字符
*/
InputFilter filter = new InputFilter() {
final int maxLen = 21;
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
// TODO Auto-generated method stub
int dindex = 0;
int count = 0;
while (count <= maxLen && dindex < dest.length()) {
char c = dest.charAt(dindex++);
if (c < 128) {
count = count + 1;
} else {
count = count + 3;
}
}
if (count > maxLen) {
return dest.subSequence(0, dindex - 1);
}
int sindex = 0;
while (count <= maxLen && sindex < source.length()) {
char c = source.charAt(sindex++);
if (c < 128) {
count = count + 1;
} else {
count = count + 3;
}
}
if (count > maxLen) {
sindex--;
}
return source.subSequence(0, sindex);
}
};
EditText editText=(EditText)findViewById(R.id.edit_text);
editText.setFilters(new InputFilter[]{filter});
这里实际上就是判断一下,英文ascii码值都是128以下,这里只要通过这个区分,来做个限制即可。
CharSequence filter(CharSequence src, int start, int end, Spanned dest, int dstart, int dend)
这个接口的参数,一开始混淆了好久
src是当前输入的文字,start和end我压根就没用到,就是输入字符的起始和终止长度
dest是当前已经显示的文字,dstart和dend含义一样,我也没用到
在我使用的过程中,使用start/end和dstart/dend就要加强判断sindex和dindex是否超过长度,比较麻烦,所以就直接使用src.length和dest.length了
最后返回的字符串,就是会添加在当前editbox已经存在文字后面,如果不超过限制的话
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。