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 "";
        }
    };
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值