Ввод в масках, используя виджет полей 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"
/>
и это!
этой сайт дает хорошие 2 класса, которые помогают маскировать, что я нашел довольно полезным.
вам нужно использовать элементы в комментариях, чтобы улучшить его. Но стоит добавить в вашу программу для удобства маскировки ваших EditText представлений для многих масок.