移动开发

android edittext进行字符限制

2016-04-26  本文已影响1020人  我妈叫我二乖

根据需求,对昵称进行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()) {
          //楼下的朋友提供更简洁的代谢            
          count++;     
        }        
         return count;    
        }
}

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

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

猜你喜欢

热点阅读