import android.text.Editable;
import android.text.Selection;
import android.text.TextWatcher;
import android.widget.EditText;
import java.io.UnsupportedEncodingException;
/*
* 监听输入内容是否超出最大长度,并设置光标位置
* */
public class MaxLengthWatcher implements TextWatcher {
private int maxLen = 0;
private EditText editText = null;
public MaxLengthWatcher(int maxLen, EditText editText) {
this.maxLen = maxLen;
this.editText = editText;
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
if(maxLen<=0){
return;
}
//字符长度 一个中文两个字符
Editable editable = editText.getText();
int len = editable.length();
if(len > maxLen>>2){//大于一半的时候判断
try {
String str = editable.toString();
byte[] bytes = str.getBytes("GBK");
if (bytes.length >= maxLen) {
int selEndIndex = Selection.getSelectionEnd(editable);
//创建新byte数组接受值
byte[] b1 = new byte[maxLen];
System.arraycopy(bytes, 0, b1, 0, maxLen);
//获取新字符串
String newStr = new String(b1,"GBK");
editText.setText(newStr);
editable = editText.getText();
//新字符串的长度
int newLen = editable.length();
//旧光标位置超过字符串长度
if(selEndIndex > newLen)
{
selEndIndex = editable.length();
}
//设置新光标所在的位置
Selection.setSelection(editable, selEndIndex);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
//字符的个数
// Editable editable = editText.getText();
// int len = editable.length();
// if(len > maxLen)
// {
// int selEndIndex = Selection.getSelectionEnd(editable);
// String str = editable.toString();
// //截取新字符串
// String newStr = str.substring(0,maxLen);
// editText.setText(newStr);
// editable = editText.getText();
//
// //新字符串的长度
// int newLen = editable.length();
// //旧光标位置超过字符串长度
// if(selEndIndex > newLen)
// {
// selEndIndex = editable.length();
// }
// //设置新光标所在的位置
// Selection.setSelection(editable, selEndIndex);
//
// }
}
}
网友评论