Android EditText限制文字長度(中文算3字元,英文算1字元)
阿新 • • 發佈:2019-02-10
/**
* 限制輸入字元長度 中文算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已經存在文字後面,如果不超過限制的話