1.为了应付有些扑街产品,自定义写的控制字节输入大小,一般都是按字符的,不知道为什么会这么扑街!!
import android.content.Context;
import android.text.InputFilter;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.util.AttributeSet;
import android.widget.EditText;
import java.io.UnsupportedEncodingException;
/**
* Created by lifesensexu on 17/4/6.
*/
public class MaxByteLengthEditText extends EditText {
private int maxByteLength = 100;
private String encoding = "UTF-8";
public MaxByteLengthEditText(Context context) {
super(context);
init();
}
public MaxByteLengthEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
setFilters(new InputFilter[]{inputFilter});
}
public int getMaxByteLength() {
return maxByteLength;
}
public void setMaxByteLength(int maxByteLength) {
this.maxByteLength = maxByteLength;
}
public String getEncoding() {
return encoding;
}
public void setEncoding(String encoding) {
this.encoding = encoding;
}
/**
* input输入过滤
*/
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;
more = len > maxByteLength;
if (more) {
end--;
source = source.subSequence(start, end);
}
} while (more);
return source;
} catch (UnsupportedEncodingException e) {
return "Exception";
}
}
};
}
2.
2.在activity里调用
editText.setMaxByteLength(12);