I'm trying to create and InputFilter that will only let user insert 1 whitespaces and no special characters.
My code can be found here: https://pastebin.com/L0J1Ua23
@Override
public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
int specialCharacters = 0;
// Check if what he has inserted has only
// Letters.
char c;
for (int pos = 0; pos < charSequence.length(); pos++) {
c = charSequence.charAt(pos);
if (!Character.isLetter(c) && !isAcceptedSpecialChar(c)) {
return "";
}
}
for (int pos = i; pos < i1; pos++) {
c = charSequence.charAt(pos);
if (Character.isWhitespace(c)) {
++specialCharacters;
}
}
for (int pos = 0; pos < spanned.length(); pos++) {
c = spanned.charAt(pos);
if (Character.isWhitespace(c)) {
++specialCharacters;
}
}
return specialCharacters > maxWhitespaces ? "" : null;
}
The problem is that whenever I insert a special character like "@" or "-", my whole text gets deleted. Moreover, for every character that I type, my InputFilter is called 2 times (from the same threads).
The way I attach my InputFilter to my views:
private void setMaxLengthFields() {
InputFilter[] inputFilters1 = new InputFilter[]{new MaxWhitespacesFilter(1)};
firstNameView.setFilters(inputFilters1);
lastNameView.setFilters(inputFilters1);
}
Does anybody else have this problem? Or does anybody know a solution to this problem?