我接到的需求时,在EditText的输入中要限制输入的字数1000,倒计显示,输入一个英文字符减1,一个中文字符减2。
utf-8的字符集中,一个英文字符或数字占用1个字节,一个汉字大部分都是占有3或4个字节。GBK字符集中,一个英文字符占用1个字节,一个汉字占用2个字节。
在讲用InputFilter过滤EditText之前,先要说EditText的两个属性:maxLength和maxEms。
maxLength:android:maxLength=“10”是对EditText的字数进行控制的。不管中文还是英文,字的个数都是10。
maxEms:个人还不会用android提供的这个属性,所以它具体该怎么使用还不清楚,但是它有一个规律:设你输入的参数为x,屏幕显示的数量为y。值为1~5时,y = x。 6~11时,y = x+1。 12~18时,y = x+2。
过滤字数
根据上述需求以及各个属性中的限制,大家应该能看得出来,限制字数这并不适合使用maxLength和maxEms这两个属性,所以我们要使用InputFilter。而在使用InputFilter中,我们需要设定一下其字符集(GBK)。下面贴代码可以感受一下:
过滤emoji表情
此时就可以完成上述需求,接下来是限制emoji表情的输入。
大家看见的RegexUtils是我写的工具类,isHasEmoji()是其中判断是否存在emoji表情,这个校验也是要写在InputFilter这个过滤器中的。代码如下:
这个方法就可以判断输入的字符中是不是emoji,如果是,return true。再看InputFilter中的方法,则return “”;返回了一个空字符串,就输入不进emoji表情了。
如需转载,请注明出处:YauLam’s Blog,thank u~