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

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

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

xml中:

代码中:

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:是纯英文模式下允许输入的最大字符数。





你可能感兴趣的:(移动开发)