现在的位置: 首页 > 综合 > 正文

Android 之 设置EditText最大可输入字符  

2013年09月16日 ⁄ 综合 ⁄ 共 5347字 ⁄ 字号 评论关闭

 

        分类:           
Android
3063人阅读评论(0)收藏举报

Android 中的EditText最大可输入字符数可以通过xml文件中为EditText设置maxLength属性或者在代码中为EditText设置LengthFilter来设置。

例如要设置EditText只能输入10个字符

xml中:

  1. <EditText 
    android:layout_width = "fill_parent" 
  2.     android:layout_height =
    "wrap_content" 
  3.     android:id =
    "@+id/mEdit" 
  4.     android:maxLength = "10"/> 

代码中:

  1. EditText mEdit = (EditText)findViewById(R.id.mEdit); 
  2. InputFilter[] filters = {new LengthFilter(10)}; 
  3. mEdit.setFilters(filters); 

以上任意一种方法都可以满足需求,但这种方法只能为EditText设置统一的最大可输入字符,如果碰到根据实际情况限制不同的可输入字符数时,这种方法就不能用了。

比如SIM卡上的电话本姓名字段长度,纯英文下允许输入17个字符,而中文则只可以输入6个字符。此时可以重写InputFilter类来实现。

即:

  1. EditText mEdit = (EditText)findViewById(R.id.mEdit);         
  2. InputFilter[] filters = {new AdnNameLengthFilter()}; 
  3. mEdit.setFilters(filters); 
  4. public static
    class AdnNameLengthFilter implements InputFilter 
  5.     { 
  6.         private int nMax; 
  7.  
  8.         public  CharSequence filter (CharSequence source,
    int start, int end, Spanned dest,
    int dstart, int dend) 
  9.         { 
  10.             Log.w("Android_12",
    "source("+start+","+end+")="+source+",dest("+dstart+","+dend+")="+dest); 
  11.  
  12.             if(isChinese(dest.toString())|| isChinese(source.toString())) 
  13.             { 
  14.                 nMax = LENGTH_ZNAME; 
  15.             }else 
  16.             { 
  17.                 nMax =LENGTH_ENAME; 
  18.             } 
  19.              
  20.                 int keep = nMax - (dest.length() - (dend - dstart)); 
  21.  
  22.                 if (keep <= 0) { 
  23.                     return
    ""
  24.                 } else if (keep >= end - start) { 
  25.                     return
    null; // keep original 
  26.                 } else
  27.                     return source.subSequence(start, start + keep); 
  28.                 } 
  29.          
  30.         } 
  31.     } 

其中的isChinese函数是判断是否字符串中是否包含中文字符,具体实现方法就不再赘述了。

LENGTH_ZNAME : 是中文模式下允许输入的最大字符数。

LENGTH_ENAME:是纯英文模式下允许输入的最大字符数。

zhuan zi:http://blog.csdn.net/feimor/article/details/6656898

Android 中的EditText最大可输入字符数可以通过xml文件中为EditText设置maxLength属性或者在代码中为EditText设置LengthFilter来设置。

例如要设置EditText只能输入10个字符

xml中:

  1. <EditText 
    android:layout_width = "fill_parent" 
  2.     android:layout_height =
    "wrap_content" 
  3.     android:id =
    "@+id/mEdit" 
  4.     android:maxLength = "10"/> 

代码中:

  1. EditText mEdit = (EditText)findViewById(R.id.mEdit); 
  2. InputFilter[] filters = {new LengthFilter(10)}; 
  3. mEdit.setFilters(filters); 

以上任意一种方法都可以满足需求,但这种方法只能为EditText设置统一的最大可输入字符,如果碰到根据实际情况限制不同的可输入字符数时,这种方法就不能用了。

比如SIM卡上的电话本姓名字段长度,纯英文下允许输入17个字符,而中文则只可以输入6个字符。此时可以重写InputFilter类来实现。

即:

  1. EditText mEdit = (EditText)findViewById(R.id.mEdit);         
  2. InputFilter[] filters = {new AdnNameLengthFilter()}; 
  3. mEdit.setFilters(filters); 
  4. public static
    class AdnNameLengthFilter implements InputFilter 
  5.     { 
  6.         private int nMax; 
  7.  
  8.         public  CharSequence filter (CharSequence source,
    int start, int end, Spanned dest,
    int dstart, int dend) 
  9.         { 
  10.             Log.w("Android_12",
    "source("+start+","+end+")="+source+",dest("+dstart+","+dend+")="+dest); 
  11.  
  12.             if(isChinese(dest.toString())|| isChinese(source.toString())) 
  13.             { 
  14.                 nMax = LENGTH_ZNAME; 
  15.             }else 
  16.             { 
  17.                 nMax =LENGTH_ENAME; 
  18.             } 
  19.              
  20.                 int keep = nMax - (dest.length() - (dend - dstart)); 
  21.  
  22.                 if (keep <= 0) { 
  23.                     return
    ""
  24.                 } else if (keep >= end - start) { 
  25.                     return
    null; // keep original 
  26.                 } else
  27.                     return source.subSequence(start, start + keep); 
  28.                 } 
  29.          
  30.         } 
  31.     } 

其中的isChinese函数是判断是否字符串中是否包含中文字符,具体实现方法就不再赘述了。

LENGTH_ZNAME : 是中文模式下允许输入的最大字符数。

LENGTH_ENAME:是纯英文模式下允许输入的最大字符数。

抱歉!评论已关闭.