首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >安卓:如何验证EditText输入?

安卓:如何验证EditText输入?
EN

Stack Overflow用户
提问于 2010-05-04 13:35:11
回答 10查看 339.9K关注 0票数 174

我需要对一系列EditTexts进行表单输入验证。我使用OnFocusChangeListeners在用户输入每个EditText之后触发验证,但这并不是最后一个as的预期行为。

如果我在输入最终的EditText时单击“完成”按钮,那么InputMethod将断开连接,但从技术上讲,焦点永远不会丢失在EditText上(因此验证永远不会发生)。

最好的解决方案是什么?

我是否应该监控InputMethod何时从每个EditText解除绑定,而不是何时焦点发生变化?如果是这样的话,是怎么做的?

EN

回答 10

Stack Overflow用户

发布于 2012-08-07 11:10:57

TextWatcher对我的口味来说有点冗长,所以我做了一些更容易接受的东西:

代码语言:javascript
复制
public abstract class TextValidator implements TextWatcher {
    private final TextView textView;

    public TextValidator(TextView textView) {
        this.textView = textView;
    }

    public abstract void validate(TextView textView, String text);

    @Override
    final public void afterTextChanged(Editable s) {
        String text = textView.getText().toString();
        validate(textView, text);
    }

    @Override
    final public void beforeTextChanged(CharSequence s, int start, int count, int after) { /* Don't care */ }

    @Override
    final public void onTextChanged(CharSequence s, int start, int before, int count) { /* Don't care */ }
}

就像这样使用它:

代码语言:javascript
复制
editText.addTextChangedListener(new TextValidator(editText) {
    @Override public void validate(TextView textView, String text) {
       /* Validation code here */
    }
});
票数 134
EN

Stack Overflow用户

发布于 2011-11-24 04:59:11

如果您希望在发生错误时获得良好的验证弹出窗口和图像,您可以使用EditText类的setError方法,如我所描述的here

票数 97
EN

Stack Overflow用户

发布于 2012-10-23 22:06:07

为了减少验证逻辑的繁琐,我编写了一个library for Android。它使用注解和内置规则处理大部分日常验证。存在诸如@TextRule@NumberRule@Required@Regex@Email@IpAddress@Password等约束。

您可以将这些注释添加到UI小部件引用中并执行验证。它还允许您异步执行验证,这非常适合于检查来自远程服务器的惟一用户名等情况。

project home page上有一个关于如何使用注释的示例。您还可以阅读我在其中编写的关于如何编写自定义验证规则的示例代码的associated blog post

下面是一个简单的例子,描述了这个库的用法。

代码语言:javascript
复制
@Required(order = 1)
@Email(order = 2)
private EditText emailEditText;

@Password(order = 3)
@TextRule(order = 4, minLength = 6, message = "Enter at least 6 characters.")
private EditText passwordEditText;

@ConfirmPassword(order = 5)
private EditText confirmPasswordEditText;

@Checked(order = 6, message = "You must agree to the terms.")
private CheckBox iAgreeCheckBox;

该库是可扩展的,您可以通过扩展Rule类来编写自己的规则。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2763022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档