EditText setError() без сообщения только значок
В настоящее время у меня есть действительно простой код, который проверяет поля EditText
и когда пользователь нажимает кнопку в конце, он проверяет их. Он поместит ошибки во все поля следующим образом:
if (!emailmatcher.matches()) {
email.setError("Invalid Email");
}
if (!zipmatcher.matches()) {
zipcode.setError("Invalid ZipCode");
}
Моя проблема с клавиатурой появится и переместит пузырь ошибки в случайное место. Я надеялся, что у вас не появится ошибка с сообщением, но сохраните значки ошибок в недопустимых полях EditText
. Я попытался ввести setError(null)
, но это не работает. Любые идеи?
Ответы
Ответ 1
Ваш код идеально подходит для отображения только значка.
Как EditText
показывает что-либо, связанное с тем, когда оно сфокусировалось. Так что просто измените свой код так, чтобы...
if (!emailmatcher.matches()) {
email.requestFocus();
email.setError("Invalid Email");
}
if (!zipmatcher.matches()) {
zipcode.requestFocus();
zipcode.setError("Invalid ZipCode");
}
Ответ 2
Вы можете использовать
setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.my_error_icon, 0);
чтобы установить значок ошибки справа от ввода текста. Возможно, вам также придется зарегистрировать
View.OnKeyListener
- reset значок ошибки на входе пользователя:
EditText myEdit = (EditText)findViewById(R.id.my_edit);
if (TextUtils.isEmpty(myEdit.getText().toString())) {
// set the warning
myEdit.requestFocus();
// show error icon
myEdit.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.error_sign, 0);
// remove the error icon on key press
myEdit.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
EditText eText = (EditText)v;
// remove error sign
eText.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
// remove this key handler
eText.setOnKeyListener(null);
return false;
}
});
}
Ответ 3
Это работает для меня.
Теперь всплывают сообщения об ошибках.
public boolean isValid() {
String email = ediTextEmail.getText().toString();
String password = ediTextPassword.getText().toString();
if (TextUtils.isEmpty(email)) {
ediTextEmail.requestFocus();
ediTextEmail.setError("Email cannot be blank");
return false;
}
if (!isEmailValid(email)) {
ediTextEmail.requestFocus();
ediTextEmail.setError("Enter a valid email id");
return false;
}
if (TextUtils.isEmpty(password)) {
ediTextPassword.requestFocus();
ediTextPassword.setError("Password cannot be blank");
return false;
}
mEmail = email;
mPassword = password;
return true;
}
Поп открыт, даже если мой фокус находится на password editText
, он будет перенаправлен на email editText
.
Ответ 4
просто создайте свой собственный edittext
и переопределить setError
public class MyEditText extends EditText {
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setError(CharSequence error, Drawable icon) {
setCompoundDrawables(null, null, icon, null);
}
}
а затем используйте все, что захотите
et.setError("", drawableToShow);
Ответ 5
Вы можете использовать мое настраиваемое решение для всплывающих окон. В этом случае всплывающее окно не зависит от состояния фокусировки EditText. Кроме того, он можно использовать с несколькими EditTexts.
https://plus.google.com/+AlexanderZaitsevDev/posts/W9XcZNZrsMB