1. 程式人生 > >Edittext限制輸入字元長度,解決中英文混用情況保證規定長度

Edittext限制輸入字元長度,解決中英文混用情況保證規定長度

好比知乎中的提問流程,提問內容不應該太長,所以會進行事先設定;最後我使用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 "";
        }
    };