EditText字符的限制:最大输入40个字符或者20个汉字
这次的功能需求是需要做一个个性签名长度的限制:需求是最多可输入40个字符或者20个汉字!一开始不知道怎么入手,后来想到了每个字符都对应一个ASCII码值,于是有了思路。具体实现如下:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText myEditText = (EditText) findViewById(R.id.editText1);
myEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int count, int after) {
int mTextMaxlenght = 0;
Editable editable = myEditText.getText();
String str = editable.toString().trim();
//得到最初字段的长度大小,用于光标位置的判断
int selEndIndex = Selection.getSelectionEnd(editable);
// 取出每个字符进行判断,如果是字母数字和标点符号则为一个字符加1,
//如果是汉字则为两个字符
for (int i = 0; i < str.length(); i++) {
char charAt = str.charAt(i);
//32-122包含了空格,大小写字母,数字和一些常用的符号,
//如果在这个范围内则算一个字符,
//如果不在这个范围比如是汉字的话就是两个字符
if (charAt >= 32 && charAt <= 122) {
mTextMaxlenght++;
} else {
mTextMaxlenght += 2;
}
// 当最大字符大于40时,进行字段的截取,并进行提示字段的大小
if (mTextMaxlenght > 40) {
// 截取最大的字段
String newStr = str.substring(0, i);
myEditText.setText(newStr);
// 得到新字段的长度值
editable = myEditText.getText();
int newLen = editable.length();
if (selEndIndex > newLen) {
selEndIndex=editable.length();
}
// 设置新光标所在的位置
Selection.setSelection(editable, selEndIndex);
Toast.makeText(MainActivity.this,"最大长度为40个字符或20个汉字!",Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}
很简单是不是,其实并没有想象中那么难!
下面是源码例子的地址:
http://download.csdn.net/detail/lucky_bo/9490186