Android 中的EditText最大可输入字符数可以通过xml文件中为EditText设置maxLength属性或者在代码中为EditText设置LengthFilter来设置。
例如要设置EditText只能输入10个字符
xml中:
- <EditText
android:layout_width = "fill_parent"
- android:layout_height =
"wrap_content" - android:id =
"@+id/mEdit" - android:maxLength = "10"/>
代码中:
- EditText mEdit = (EditText)findViewById(R.id.mEdit);
- InputFilter[] filters = {new LengthFilter(10)};
- mEdit.setFilters(filters);
以上任意一种方法都可以满足需求,但这种方法只能为EditText设置统一的最大可输入字符,如果碰到根据实际情况限制不同的可输入字符数时,这种方法就不能用了。
比如SIM卡上的电话本姓名字段长度,纯英文下允许输入17个字符,而中文则只可以输入6个字符。此时可以重写InputFilter类来实现。
即:
- EditText mEdit = (EditText)findViewById(R.id.mEdit);
- InputFilter[] filters = {new AdnNameLengthFilter()};
- mEdit.setFilters(filters);
- public static
class AdnNameLengthFilter implements InputFilter
- {
- private int nMax;
- public CharSequence filter (CharSequence source,
int start, int end, Spanned dest,
int dstart, int dend)
- {
- Log.w("Android_12",
"source("+start+","+end+")="+source+",dest("+dstart+","+dend+")="+dest);
- if(isChinese(dest.toString())|| isChinese(source.toString()))
- {
- nMax = LENGTH_ZNAME;
- }else
- {
- nMax =LENGTH_ENAME;
- }
- int keep = nMax - (dest.length() - (dend - dstart));
- if (keep <= 0) {
- return
""; - } else if (keep >= end - start) {
- return
null; // keep original
- } else {
- return source.subSequence(start, start + keep);
- }
- }
- }
其中的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中:
- <EditText
android:layout_width = "fill_parent"
- android:layout_height =
"wrap_content" - android:id =
"@+id/mEdit" - android:maxLength = "10"/>
代码中:
- EditText mEdit = (EditText)findViewById(R.id.mEdit);
- InputFilter[] filters = {new LengthFilter(10)};
- mEdit.setFilters(filters);
以上任意一种方法都可以满足需求,但这种方法只能为EditText设置统一的最大可输入字符,如果碰到根据实际情况限制不同的可输入字符数时,这种方法就不能用了。
比如SIM卡上的电话本姓名字段长度,纯英文下允许输入17个字符,而中文则只可以输入6个字符。此时可以重写InputFilter类来实现。
即:
- EditText mEdit = (EditText)findViewById(R.id.mEdit);
- InputFilter[] filters = {new AdnNameLengthFilter()};
- mEdit.setFilters(filters);
- public static
class AdnNameLengthFilter implements InputFilter
- {
- private int nMax;
- public CharSequence filter (CharSequence source,
int start, int end, Spanned dest,
int dstart, int dend)
- {
- Log.w("Android_12",
"source("+start+","+end+")="+source+",dest("+dstart+","+dend+")="+dest);
- if(isChinese(dest.toString())|| isChinese(source.toString()))
- {
- nMax = LENGTH_ZNAME;
- }else
- {
- nMax =LENGTH_ENAME;
- }
- int keep = nMax - (dest.length() - (dend - dstart));
- if (keep <= 0) {
- return
""; - } else if (keep >= end - start) {
- return
null; // keep original
- } else {
- return source.subSequence(start, start + keep);
- }
- }
- }
其中的isChinese函数是判断是否字符串中是否包含中文字符,具体实现方法就不再赘述了。
LENGTH_ZNAME : 是中文模式下允许输入的最大字符数。
LENGTH_ENAME:是纯英文模式下允许输入的最大字符数。