當我們在Editext輸入內容的時候,檢測如果超過限制的長度無法輸入內容,並且給用戶提示。 首先我想到了下麵的方法: 未經測試,個人覺得這種體驗或許不是很好,或許會出現EdiText閃動。 其實我們可以用下麵這種方法: 源碼給Editext設置了過濾器,專門用來判斷是否超出最大的字元長度,把這段過濾 ...
當我們在Editext輸入內容的時候,檢測如果超過限制的長度無法輸入內容,並且給用戶提示。
首先我想到了下麵的方法:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length() > 6){ //判斷EditText中輸入的字元數是不是已經大於6
editText.setText(s.toString().substring(0,6)); //設置EditText只顯示前面6位字元
editText.setSelection(6);//讓游標移至末端
Toast.makeText(MainActivity.this, "輸入字數已達上限",
Toast.LENGTH_SHORT).show();
return;
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
未經測試,個人覺得這種體驗或許不是很好,或許會出現EdiText閃動。
其實我們可以用下麵這種方法:
源碼給Editext設置了過濾器,專門用來判斷是否超出最大的字元長度,把這段過濾器取出來,在裡面加上Toast提示,設置給Editext就可以了。
class MyLengthFilter implements InputFilter {
private final int mMax;
private Context context;
public MyLengthFilter(int max, Context context) {
mMax = max;
this.context = context;
}
public CharSequence filter(CharSequence source, int start, int end, Spanned dest,
int dstart, int dend) {
int keep = mMax - (dest.length() - (dend - dstart));
if (keep <= 0) {
//這裡,用來給用戶提示
Toast.makeText(context, "字數不能超過" + mMax, Toast.LENGTH_SHORT).show();
return "";
} else if (keep >= end - start) {
return null; // keep original
} else {
keep += start;
if (Character.isHighSurrogate(source.charAt(keep - 1))) {
--keep;
if (keep == start) {
return "";
}
}
return source.subSequence(start, keep);
}
}
/**
* @return the maximum length enforced by this input filter
*/
public int getMax() {
return mMax;
}
}
調用:
mEditext.setFilters(new InputFilter[]{new MyLengthFilter(100,context)});
源碼中該方法是這樣的:
public void setFilters(InputFilter[] filters) {
if (filters == null) {
throw new IllegalArgumentException();
}
mFilters = filters;
if (mText instanceof Editable) {
setFilters((Editable) mText, filters);
}
}
由此可見我們可以給Editext設置多個過濾器,例如過濾掉一些特殊字元,表情等等。
學習android有一個很重要的能力就是閱讀源碼的能力,很多問題都可以通過閱讀源碼找到解決方法。
參考鏈接:https://blog.csdn.net/qq_26411333/article/details/51647888