Skip to content

Instantly share code, notes, and snippets.

@blehr
Created August 20, 2018 22:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save blehr/04275aa31bba819b9515decd9f0ffe8d to your computer and use it in GitHub Desktop.
Save blehr/04275aa31bba819b9515decd9f0ffe8d to your computer and use it in GitHub Desktop.
package com.blehr.datepickerexample;
import android.text.Editable;
import android.text.TextWatcher;
import java.util.Locale;
public class DateMask implements TextWatcher {
private static final int MAX_LENGTH = 8;
private static final int MIN_LENGTH = 2;
private String updatedText;
private boolean editing;
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int before, int count) {
}
@Override
public void onTextChanged(CharSequence text, int start, int before, int count) {
if (text.toString().equals(updatedText) || editing) return;
String digits = text.toString().replaceAll("\\D", "");
int length = digits.length();
if (length <= MIN_LENGTH) {
updatedText = digits;
return;
}
if (length > MAX_LENGTH) {
digits = digits.substring(0, MAX_LENGTH);
}
if (length <= 4) {
String month = digits.substring(0, 2);
String day = digits.substring(2);
updatedText = String.format(Locale.US, "%s/%s", month, day);
}
else {
String month = digits.substring(0, 2);
String day = digits.substring(2, 4);
String year = digits.substring(4);
updatedText = String.format(Locale.US, "%s/%s/%s", month, day, year);
}
}
@Override
public void afterTextChanged(Editable editable) {
if (editing) return;
editing = true;
editable.clear();
editable.insert(0, updatedText);
editing = false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment