Ввод в масках, используя виджет полей EditText в Андроид

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

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

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

Баззи

6 ответов


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

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


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


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 функция для вкусного секса кролика на лету с отформатированными номерами телефонов.


самый простой способ, который я знаю, чтобы использовать маску на 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"
    />

и это!

enter image description here


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

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


вы можете использовать этот эфект В полей EditText

enter image description here