目前我有一个非常简单的代码可以验证EditText
字段,当用户点击按钮时,它会检查它们。它会在所有字段中输出错误:
if (!emailmatcher.matches()) {
email.setError("Invalid Email");
}
if (!zipmatcher.matches()) {
zipcode.setError("Invalid ZipCode");
}
我的问题是键盘会弹出并将错误气泡移动到随机位置。我希望没有错误气泡和消息,但将错误图标保留在无效的EditText
字段中。我尝试输入setError(null)
,但这不起作用。任何想法?
答案 0 :(得分:56)
您的代码非常适合仅显示图标。
因为EditText
显示与焦点何时相关的任何内容。所以只需将代码改为那样......
if (!emailmatcher.matches()) {
email.requestFocus();
email.setError("Invalid Email");
}
if (!zipmatcher.matches()) {
zipcode.requestFocus();
zipcode.setError("Invalid ZipCode");
}
答案 1 :(得分:5)
您可以使用
setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.my_error_icon, 0);
将错误图标设置在文本输入的右侧。您可能还需要注册
View.OnKeyListener
重置用户输入的错误图标:
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;
}
});
}
答案 2 :(得分:2)
这对我有用。 现在弹出错误消息。
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
。
答案 3 :(得分:0)
只需创建自己的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);
答案 4 :(得分:0)
您可以将我的自定义解决方案用于弹出窗口。在这种情况下,弹出窗口独立于EditText焦点状态。此外,它可用于多个EditTexts。 https://plus.google.com/+AlexanderZaitsevDev/posts/W9XcZNZrsMB