EditText不再专注于输入特殊字符

时间:2018-10-29 11:01:08

标签: android android-edittext passwords

我收到奇怪的错误

我在“密码”字段中有一个Edittext

<EditText
                    android:id="@+id/etNewPassword"
                    style="@style/EditTextStyle"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/hint_new_password"
                    android:inputType="textPassword|textNoSuggestions"
                    android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^*"
                    android:maxLength="16"
                    android:textSize="14dp" />

假设我要在那个editText字段中输入 Password @ 123 。 它不会输入@之后的值。输入@之后便失去了焦点 然后再次需要单击相同的EditText并输入值123。

但是如果我键入@ 123,它可以工作。即使我输入@Pass也可以。 当我尝试使Letters-SpecialCharacter-numbers组合时,它仅不起作用。 它仅在某些设备上发生。

这是我的Java代码。

etPassword.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            String str = "";

            @Override
            public void afterTextChanged(Editable s) {

                String text = s.toString();
                str = s.toString();
                if (etPassword.getText().toString().length() > 0 && etPassword.getText().toString().equals(" ") && etPassword.getText().toString().equals("^[@.#$%^&*_&\\\\\\\\]+$")) {
                    etPassword.setText("");
                } else {
                    if (Utils.validateNotBlank(etPassword.getText().toString())) {
                        Pattern p = Pattern.compile("[A-Za-z0-9]+");
                        Matcher m = p.matcher(text);
                       //boolean b = m.matches();


                        if (some_ID_validation) {

                            String editTextString = etPassword.getText().toString();
                            boolean spaceExist = false, specialExist = false;

                            if (editTextString.contains(" ")) {

                                text = etPassword.getText().toString().replaceAll(" ", "");
                                if (!str.equals(text)) {
                                    str = text;

                                    spaceExist = true;
                                    etPassword.setText(text);
                                    etPassword.setSelection(text.length());

                                }

                            }
                            if (!m.matches()) {

                                text = etPassword.getText().toString().replaceAll("[^a-zA-Z0-9]+", "");


                                if (!str.equals(text)) {
                                    specialExist = true;
                                    str = text;
                                    etPassword.setText(text);
                                    etPassword.setSelection(text.length());

                                }
                            }



                    Pattern p = Pattern.compile("[^-\\s]");
                    Matcher m = p.matcher(text);
                    boolean b = m.matches();
                    if (etPassword.getText().toString().contains(" ") && !b) {

                        text = text.replaceAll(" ", "");
                        Util.showToast("Spaces not allowed in password field", activity);
                        if (!str.equals(text)) {
                            str = text;

                            etPassword.setText(text);
                            etPassword.setSelection(text.length());
                        }
                    }
                    if (text.length() > 0) {
                        //setPasswordStrengthMsg(Util.getPasswordStrength(text));

                    } else {
                        if (!str.equals(text)) {
                            str = text;
                            etPasswordStrength.setText("");
                        }
                    }

                }
            }


        });

    }

仅在某些手机上不起作用

2 个答案:

答案 0 :(得分:0)

请在您的Edittext android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^*"

中删除以下行

答案 1 :(得分:0)

同时删除XML的输入类型和数字属性