android edittext进行字符限制

来源:互联网 发布:大疆通信算法工程师 编辑:程序博客网 时间:2024/06/01 09:35

根据需求,对昵称进行20个字符的限制,一个汉字占两个字符,一个字母占一个字符,当已经输入19个字符的时候,不可以输入汉字,但是还可以输入一个字母。如果输入超过20个字符,进行截取20个字符。以下是网上大神的工具类,我这边根据自己需求修改。(其中的20个可以随意的修改)

1.这是个工具类

public class NameLengthFilter implements InputFilter {       int MAX_EN;// 最大英文/数字长度 一个汉字算两个字母        String regEx = "[\\u4e00-\\u9fa5]"; // unicode编码,判断是否为汉字    public NameLengthFilter(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()) {                      for (int i = 0; i <= m.groupCount(); i++) {                            count = count + 1;                      }                }                 return count;            }}

2.在需要的地方只需要添加上这两句即可(其中的et_hotel_user_name是你自己的edittext):

InputFilter[] filters = {new NameLengthFilter(20)};
et_hotel_user_name.setFilters(filters);

0 0