Изменять маску в MaskedEditText динамически Android
Использую библиотеку MaskedEditText для ввода телефона с помощью маски, нужно использовать маску вида "+380 _ _ _ _ _ _ _ _ _", вся проблема в том что если не использовать пробелы между знаками _ они будут слитые (дизайнер против этого), а если так оставить то большие пробелы между цифрами, для этого я написал методы, которые динамически превращают маску в нужные, вызываются они в addTextChangedListener, однако так как маска это изменение текста то оно зацыкливается, помогите реализовать изменение, код класса ниже:
private MaskedEditText phone;
String uaMask = "# # # # # # # # # # # # #";
String currentMask = "_ _ _ _ _ _ _ _ _ _ _ _ _";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
convertCurrentMaskToStart();
phone = findViewById(R.id.phone);
phone.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
currentMask = phone.getText().toString();
phone.setMask(toEndMask(convertCurrentMaskToStart()));
}
});
}
private String convertCurrentMaskToStart() {
int j = 0;
StringBuilder endMask = new StringBuilder();
try {
for (int i = 0; i < currentMask.length(); i++) {
if (!Character.toString(currentMask.charAt(i)).equals("_") && !Character.toString(currentMask.charAt(i)).equals(" ")) {
endMask.append(currentMask.charAt(i));
j += 1;
} else if (Character.toString(currentMask.charAt(i)).equals(" ")) {
endMask.append(" ");
j += 1;
} else {
endMask.append(uaMask.substring(j));
return endMask.toString();
}
}
} catch (Exception e) {
return currentMask;
}
return endMask.toString();
}
private String toEndMask(String mask) {
StringBuilder endMask = new StringBuilder();
for (int i = 0; i < mask.length(); i++) {
//System.out.println(mask.charAt(i) + ": " + (Character.toString(mask.charAt(i)).equals("+") || isNumeric(Character.toString(mask.charAt(i)))));
if (Character.toString(mask.charAt(i)).equals("+") || isNumeric(Character.toString(mask.charAt(i)))) {
endMask.append("#");
i++;
} else if (Character.toString(mask.charAt(i)).equals(" ")) {
endMask.append(" ");
} else {
return endMask.append(mask.substring(i)).toString();
}
}
return endMask.toString();
}
public static boolean isNumeric(String strNum) {
return strNum.matches("-?\\d+(\\.\\d+)?");
}
А также разметка самого поля для ввода:
<br.com.sapereaude.maskedEditText.MaskedEditText
android:id="@+id/phone"
android:layout_width="match_parent"
android:layout_height="54dp"
android:hint="_____________"
android:inputType="phone"
android:textColorHint="#000000"
android:textColor="#000000"
android:textCursorDrawable="@null"
android:textSize="16sp"
app:keep_hint="true"
app:mask="# # # # # # # # # # # # #" />