各种字符的限制输入

各种字符的限制输入

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));

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值