判斷Edittext剩余可輸入字符數

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);

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容