Edittext限制輸入字元長度,解決中英文混用情況保證規定長度
阿新 • • 發佈:2019-02-07
好比知乎中的提問流程,提問內容不應該太長,所以會進行事先設定;最後我使用InputFilter解決了這個問題,程式碼如下。
首先普及一下GB18030編碼標準:GB 18030,全稱:國家標準 GB 18030-2005《資訊科技中文編碼字符集》,是中華人民共和國現時最新的內碼字集,是 GB 18030-2000《資訊科技資訊交換用漢字編碼字符集基本集的擴充》的修訂版。通過對漢字的轉換,可以統一計算位元組的長度,這樣就可以處理中英文混用的問題。
mEditText.setFilters(new InputFilter[]{inputFilter});
//限制問題內容輸入字元長度 InputFilter inputFilter = new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { try { //轉換成中文字符集的長度 int destLen = dest.toString().getBytes("GB18030").length; int sourceLen = source.toString().getBytes("GB18030").length; Log.i("tag","String.valueOf(destLen + sourceLen)="+String.valueOf(destLen + sourceLen)); //如果超過100個字元 if (destLen + sourceLen > 100) { Toast.makeText(AskActivity.this,"最多可以輸入50個漢字字元或者100個英文字母",Toast.LENGTH_SHORT).show(); return ""; } //如果按返回鍵 if (source.length() < 1 && (dend - dstart >= 1)) { return dest.subSequence(dstart, dend - 1); } //其他情況直接返回輸入的內容 return source; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return ""; } };