EditText теряет фокус при вводе специальных символов - PullRequest
0 голосов
/ 29 октября 2018

Я получаю сообщение об ошибке

У меня есть один текст редактирования для поля пароля

<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" />

Предположим, я хочу ввести Пароль @ 123 в это поле editText. Не вводить мне значения после @ .it теряет фокус после ввода @ затем снова мне нужно нажать на тот же EditText и ввести значения 123.

но если я наберу @ 123, это работает. Даже если я наберу @Pass, он работает. Это только не работает, когда я пытаюсь сделать комбинацию букв-специальных символов-цифр. Это происходит только на некоторых устройствах.

Вот мой код 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 голосов
/ 29 октября 2018

удалить как тип ввода, так и атрибут цифр вашего XML

0 голосов
/ 29 октября 2018

Пожалуйста, удалите нижнюю строку в вашем Edittext android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^*"

...