Я предлагаю проверить ввод пользователя с помощью TextWatcher:
EditText textbox = new EditText(context);
textbox.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// Your validation code goes here
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
});
Обрабатывать проверку только в методе afterTextChanged, не касайтесь двух других, как указано в документации . Однако afterTextChanged get срабатывает каждый раз, когда изменяется вход, поэтому, если пользователь вводит слово "hello", этот метод get вызывается при вводе h, затем снова при вводе e и так далее ... Более того, если вы измените значение edittext в afterTextChanged метод get тоже вызывается.
Альтернативой является проверка ввода пользователя, когда EditText теряет фокус. Для этого вы можете использовать:
textbox.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// Your validation code goes here
}
});
Однако учтите, что некоторые виджеты могут не захватывать фокус, поэтому ваш Edittext никогда не теряет его (например, с кнопками).
Кроме того, EditText предлагает метод setError , который помечает текст редактирования красной меткой ошибки и показывает текст, переданный пользователю setError (текст может быть установлен вами при вызове setError ( сообщение об ошибке")).