序:此文章主要概要如何控制EditText字符长度,分别从layout的配置和代码实现两方面说明.以备日后之用,也供大家学习.如有不恰当之处还请大家多多指出[红色 标记处为重点].
import android.content.Context;
import android.graphics.Color;
import android.text.InputFilter;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.widget.EditText;
/**
* <esEditTxt控件底层实现类>
*
* @FileName
* @author christineRuan
* @date 2013-12-6 上午9:10:59
* @version V1.0 <实现:约束控件最大字符值>
*/
public class ESEditText extends EditText {
//private String encoding = "GBK";
private int maxByteLength = 100;
//默认100个字符
public ESEditText(Context context,int maxSize) {
super(context);
this.setTextColor(Color.BLACK);
if(maxSize==-1)
//未做maxSize配置
{
maxSize=maxByteLength;
}
init(maxSize);
}
private void init(int maxSize) {
maxByteLength=maxSize;
setFilters(new InputFilter[] { inputFilter });
//设置输入过滤
}
private InputFilter inputFilter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
try {
int len = 0;
boolean more = false;
do {
SpannableStringBuilder builder = new SpannableStringBuilder(
dest).replace(dstart, dend,source.subSequence(start, end));//len = builder.toString().getBytes(encoding).length;
dest).replace(dstart, dend,
source.subSequence(start, end));
//len = builder.toString().getBytes(encoding).length;
//字节长度
len = builder.toString().length();
//字符长度
more = len > maxByteLength;
if (more) {
end--;
source = source.subSequence(start, end);
}
} while (more);
return source;
} catch (Exception e) {
return "Exception";
}
}
};
}