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 "";
        }
    };

你可能感兴趣的:(开发)