EditText字符的限制:最大输入30个字符或者15个汉字

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





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