Маскированный ввод с помощью виджета EditText в Android

Есть ли способ указать маску ввода для элемента управления EditText в Android?

Я хочу иметь возможность указать что-то вроде ### - ## - #### для номера социального страхования. Это приведет к автоматическому отклонению любого недействительного ввода (например, я набираю алфавитные символы вместо числовых цифр).

Я понимаю, что я могу добавить OnKeyListener и проверять вручную. Но это утомительно, и мне придется обрабатывать различные краевые случаи.

Баззи

Ответы

Ответ 1

Попробуйте использовать InputFilter, а не OnKeyListener. Это означает, что вам не нужно беспокоиться о отслеживании отдельных нажатий клавиш, а также обрабатывать такие вещи, как вставка в поле, которое было бы болезненно для обработки с помощью OnKeyListener.

Вы могли бы взглянуть на источник реализаций InputFilter, который поставляется с Android, чтобы дать вам отправную точку для написания самостоятельно.

Ответ 2

Вы можете взглянуть на класс android.telephony.PhoneNumberFormattingTextWatcher. Он маскирует текстовый ввод номера телефона с шаблоном ### - ### - ####.

Ответ 3

String phoneNumber = "1234567890";

String text = String.valueOf( android.telephony.PhoneNumberUtils.formatNumber(phoneNumber) ); //formatted: 123-456-7890

editTextMobile.setText(text); //set editText text equal to new formatted number

editTextMobile.setSelection(text.length()); //move cursor to end of editText view

Используйте это в функции onKey для восхитительного секс-зайчика на лету с форматированными номерами телефонов.

Ответ 4

Самый простой способ использовать маску на EditText в ваших программах Android в Android Studio - использовать библиотеку MaskedEditText (ссылка GitHub). Это своего рода пользовательский EditText с Watcher, который позволяет вам установить подсказку с другим цветом (если вы хотите, чтобы она была доступна, даже когда пользователь уже начал вводить текст), маскируйте и очень легко использовать: -)

compile 'ru.egslava:MaskedEditText:1.0.5'

<br.com.sapereaude.maskedEditText.MaskedEditText
    android:id="@+id/phone_input"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="phone"
    android:typeface="monospace"
    mask:allowed_chars="1234567"
    mask:mask="###-##-##"
    app:keep_hint="true"
    />

И это!

введите описание изображения здесь

Ответ 5

Этот сайт дает хорошие 2 класса, которые помогают с маскировкой, которую я нашел весьма полезной.

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

Ответ 6

вы можете использовать этот efect в EditText

введите описание изображения здесь