Android InputType.TYPE_NUMBER_VARIATION_PASSWORD для видимого номера пароля (только номера) - PullRequest
0 голосов
/ 25 мая 2019

Я реализовал Edittext, который принимает numberPassword , а также позволяет пользователю показывать пароль и скрывать пароль. Это работает, но есть одна проблема, которую я не могу решить.

Я использовал InputType.TYPE_CLASS_NUMBER and InputType.TYPE_NUMBER_VARIATION_PASSWORD, чтобы скрыть работающий пароль, я использовал InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, чтобы сделать его видимым.

Но тогда InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD также позволяет пользователю вводить как символы, так и цифры, но я этого не хочу. Я хочу, чтобы пользователи могли вводить цифры ТОЛЬКО.

Пожалуйста, как мне этого добиться?

это мой код ниже:

private fun setShowHiddenField(field: TextInputEditText, checked: Boolean){
        if(checked){
            field.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
        } else {
            field.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_VARIATION_PASSWORD
        }
        field.setSelection(field.getText().toString().length)
    }

Редактировать

Для тех, кто спрашивает, почему я не сделал этого в XML? Даже если вы делаете это в xml, использование InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD все равно вызовет клавиатуру, разрешающую как тексты, так и цифры.

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

<android.support.design.widget.TextInputEditText
                android:id="@+id/cardNumberEditText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="numberPassword"
                android:maxLines="1"
                android:digits="1234567890"
                tools:ignore="LabelFor,NegativeMargin"/>

Думайте об этом как о Edittext, принимающем PIN-код , который вы также хотите дать пользователям возможность просматривать PIN-код и скрывать его.

Я использую флажок, чтобы позволить пользователю выбрать, чтобы скрыть или показать. Поэтому я не могу использовать параметры пароля, такие как passwordToggleContentDescription или passwordToggleEnabled или passwordToggleTint

1 Ответ

0 голосов
/ 26 мая 2019

Я нашел способ решить мою проблему, а не прямое решение, но оно работает.

Вы можете технически увидеть, как клавиатура быстро меняется с букв на цифры при использовании эмулятора, но на устройстве это работает довольно хорошо, поскольку вы вряд ли заметите быстрое изменение, если не будете уделять так много внимания.

private fun setShowHiddenField(field: TextInputEditText, checked: Boolean){
        if(checked){
            field.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD

            // set keyboard back to allowing only digits & specify them
            field.keyListener = DigitsKeyListener.getInstance("0123456789")

        } else {
            field.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_VARIATION_PASSWORD
        }
        field.setSelection(field.getText().toString().length)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...