在工作中,根据需求,EditText对输入的内容进行20个字符的限制,一个汉字占两个字符,一个字母占一个字符,当已经输入19个字符的时候,不可以输入汉字,但是还可以输入一个字母。如果输入超过20个字符,进行截取20个字符。以下是网上大神的工具类,我这边根据自己需求修改。(其中的20个可以随意的修改)
1,创建工具类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package com.zhzd.youde.util; import android.text.InputFilter; import android.text.Spanned; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * author: xiaocheng * date: 2019-08-03 11:00 */ public class CharLengthFilter implements InputFilter { private int MAX_EN; // 最大英文/数字长度 一个汉字算两个字母 private String regEx = "[\\u4e00-\\u9fa5]" ; // unicode编码,判断是否为汉字 public CharLengthFilter( int mAX_EN) { super (); MAX_EN = mAX_EN; } @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { int destCount = dest.toString().length() + getChineseCount(dest.toString()); int sourceCount = source.toString().length() + getChineseCount(source.toString()); String name = "" ; int count = 0 ; int i = 0 ; if (destCount + sourceCount > MAX_EN) { if (destCount < MAX_EN) { while (!(destCount + count >= MAX_EN)) { ++i; name = source.subSequence( 0 , i).toString(); count = name.toString().length() + getChineseCount(name.toString()); if (destCount + count > MAX_EN) { --i; } } return i == 0 ? "" : source.subSequence( 0 , i).toString(); } return "" ; } else { return source; } } private int getChineseCount(String str) { int count = 0 ; Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(str); while (m.find()) { count++; } return count; } } |
2.在需要的地方只需要添加上这两句即可(其中的testEt是你自己的EditText):
1 2 | InputFilter[] filters = { new CharLengthFilter( 20 )}; testEt.setFilters(filters); |
ok,大功告成,赶快试试吧
标签:
Edittext进行字符限制