EditText超出字數限制,給用戶提示


當我們在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/51647888http://77blogs.com/?p=554


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM