好比知乎中的提问流程,提问内容不应该太长,所以会进行事先设置;最后我使用
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 "";
}
};