Маскированный ввод с помощью виджета 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
![введите описание изображения здесь]()