判断Edittext剩余可输入字符数

2017-09-12  本文已影响8人  兣甅

packagecom.aimymusic.android.utils;

importandroid.text.InputFilter;

importandroid.text.Spanned;

/**

*根据字符判断可输入长度

*/

public abstract classCharLengthFilterimplementsInputFilter {

//最大可输入长度

private intmaxLen=0;

//超过最大输入长度的提示

public abstract voidonCharsOverflow();

//剩余可输入字数的提示

public abstract voidonRemainNum(intremain);

publicCharLengthFilter(intmax) {

maxLen= max;

}

//参数source:将要插入的字符串,来自键盘输入、粘贴

//参数start:source的起始位置,为0(暂时没有发现其它值的情况)

//参数end:source的长度

//参数dest:EditText中已经存在的字符串

//参数dstart:插入点的位置

//参数dend:插入点的结束位置,一般情况下等于dstart;如果选中一段字符串(这段字符串将会被替换),dstart的值就插入点的结束位置

publicCharSequence filter(CharSequence source,intstart,intend, Spanned dest,intdstart,intdend) {

intdindex =0;

intcount =0;

intdestCountNum =0;

//计算已有字符长度

while(count <=maxLen&& dindex < dest.length()) {

charc = dest.charAt(dindex++);

if(c <128) {

count +=1;

destCountNum +=1;

}else{

count +=2;

destCountNum +=2;

}

}

if(count >maxLen) {

onCharsOverflow();

returndest.subSequence(0, dindex -1);

}

intsindex =0;

//计算需要输入的字符长度

while(count <=maxLen&& sindex < source.length()) {

charc = source.charAt(sindex++);

if(c <128) {

count +=1;

}else{

count +=2;

}

}

//计算需要删除的字符长度

if(source.length() ==0) {

for(inti = dstart; i < dend; i++) {

charc = dest.charAt(i);

if(c <128) {

count -=1;

}else{

count -=2;

}

}

}

if(count >maxLen) {

onCharsOverflow();

sindex--;

}

if(count >=maxLen) {

intcountNum =0;

for(inti =0; i < sindex; i++) {

charc = source.charAt(i);

if(c <128) {

countNum +=1;

}else{

countNum +=2;

}

}

onRemainNum(maxLen- countNum - destCountNum);

}else{

onRemainNum(maxLen- count);

}

returnsource.subSequence(0, sindex);

}

}

上一篇下一篇

猜你喜欢

热点阅读