各种字符的限制输入
1、简述
在真实的商业项目中,一个EditText常常需要对输入字符进行限制,不可能输入任何字符,然后我们客户端直接把这些数据传给后台,现实数据的交互。很典型的场景就是:接收手机号码的EditText只接收0到9的数字;接受密码的EditText不接收汉字、不常见的符号。
2、代码示例
①、限制EditText只接收0到9的数字
public class PhoneKeyListener extends NumberKeyListener {
@Override
protected char[] getAcceptedChars() {
char[] numberChars = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', ' '};
return numberChars;
}
@Override
public int getInputType() {
return InputType.TYPE_CLASS_PHONE;
}
}
et_usn.setKeyListener(new PhoneKeyListener());
②、限制EditText不接收汉字、非法字符,常用于密码输入框
public class PasswordKeyListener extends NumberKeyListener {
@Override
protected char[] getAcceptedChars() {
String rule_psw = BaseApp.getGlobleContext().getResources().getString(R.string.tx_limit_psw_imput);
return rule_psw.toCharArray();
}
@Override
public int getInputType() {
return InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD;
}
}
<string name="tx_limit_psw_imput">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`¬!"£$%^*()~=#{}[];':,./?/*-_+<>@&</string>
et_psw.setKeyListener(new PasswordKeyListener());
③、手机号码自动加空格
public class SpaceTextWatcher implements TextWatcher {
private EditText editText;
public SpaceTextWatcher(EditText editText) {
this.editText = editText;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (count == 1) {
int length = s.toString().length();
if (length == 3 || length == 8) {
editText.setText(s + " ");
editText.setSelection(editText.getText().toString().length());
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
}
et_usn.addTextChangedListener(new SpaceTextWatcher(et_usn));