1

Is there any way to validate EditText fields in real time, before the user clicks a button.

For example, if I have

if (password.length() < 6) {
    passwordwrapper.setError("Password must have at least 6 characters");
    return;
}

and

if (!validateEmail(email)) {
    emailwrapper.setError("Invalid email");
    return;
}

with the validateEmail method being

private static final String EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$";
private Pattern pattern = Pattern.compile(EMAIL_PATTERN);
private Matcher matcher;

public boolean validateEmail(String email) {
    matcher = pattern.matcher(email);
    return matcher.matches();
}

How would I setup a TextWatcher or something else to validate it real time?

Infuzion
  • 641
  • 6
  • 16
HackNode
  • 159
  • 2
  • 11

2 Answers2

2

TextWatcher is used when an object of a type is attached to an Editable, its methods will be called when the text is changed. Here is the simplest way to set up Textwatcher:

   EditText inputName = (EditText) findViewById(R.id.input_name);
   EditText inputEmail = (EditText) findViewById(R.id.input_email);
   EditTextinputPassword = (EditText) findViewById(R.id.input_password);
   TextInputLayout inputLayoutEmail = (TextInputLayout) findViewById(R.id.input_layout_email);

   inputName.addTextChangedListener(new MyTextWatcher(inputName));
   inputEmail.addTextChangedListener(new MyTextWatcher(inputEmail));
   inputPassword.addTextChangedListener(new MyTextWatcher(inputPassword))

Validate email

    private boolean validateEmail() {
    String email = inputEmail.getText().toString().trim();

    if (email.isEmpty() || !isValidEmail(email)) {
        inputLayoutEmail.setError(getString(R.string.err_msg_email));
        requestFocus(inputEmail);
        return false;
    } else {
        inputLayoutEmail.setErrorEnabled(false);
    }

    return true;
}

Check wheather email valid or not,

 private static boolean isValidEmail(String email) {
        return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
     }

Implements them,

private class MyTextWatcher implements TextWatcher {

    private View view;

    private MyTextWatcher(View view) {
        this.view = view;
    }

    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    public void afterTextChanged(Editable editable) {
        switch (view.getId()) {
            case R.id.input_name:
                validateName();
                break;
            case R.id.input_email:
                validateEmail();
                break;
            case R.id.input_password:
                validatePassword();
                break;
        }
    }
}

I hope this will helpful for you.

Horrorgoogle
  • 7,858
  • 11
  • 48
  • 81
1

can you try

Field1 = (EditText)findViewById(R.id.field1);


Field1.addTextChangedListener(new TextWatcher() {

   public void afterTextChanged(Editable s) {}

   public void beforeTextChanged(CharSequence s, int start,
     int count, int after) {
   }

   public void onTextChanged(CharSequence s, int start,
     int before, int count) {

   }
  });
bajji
  • 1,271
  • 3
  • 15
  • 37