Как удалить замаскированный текст правки - PullRequest
0 голосов
/ 04 мая 2020

например: «2020/55» У меня есть форма edittext, поставить один за 4 числа, написать число после него, и это работает хорошо. Моя проблема начинается во время удаления. При удалении части после / она показывает "/////" цифры части до / как и вместо. Я добавляю вашу фотографию, как я могу ее удалить. введите описание изображения здесь

И класс маски

public class CaseInputMask implements TextWatcher {
int uzunluk = 0;
EditText girilenMetin;

public CaseInputMask(EditText girilenMetin) {
    this.girilenMetin = girilenMetin;
    this.girilenMetin.addTextChangedListener(this);
}

@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    String metin = girilenMetin.getText().toString();
    uzunluk = metin.length();
}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    try {
        String metin = charSequence.toString();
        String girilenDeger = girilenMetin.getText().toString();
        if (girilenDeger.length() == 4) {
            metin += '/';
            girilenMetin.setText(metin);
            girilenMetin.setSelection(metin.length());
        }
    } catch (Exception e) {

    }
}

@Override
public void afterTextChanged(Editable editable) {

}
}

1 Ответ

0 голосов
/ 04 мая 2020

Вы должны проверить удаление следующим образом:

public class CaseInputMask implements TextWatcher {
private boolean running = false;
private boolean deleting = false;
private final String inputMask = "####/##";

public CaseInputMask() {

}

@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
    deleting = count > after;
}

@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
}

@Override
public void afterTextChanged(Editable editable) {
    if (running || deleting) {
        return;
    }
    running = true;

    int length = editable.length();
    if (length < inputMask.length()) {
        if (inputMask.charAt(length) != '#') {
            editable.append(inputMask.charAt(length));
        } else if (inputMask.charAt(length-1) != '#') {
            editable.insert(length-1, inputMask, length-1, length);
        }
    }

    running = false;
   }
}

И

girilenMetin.addTextChangedListener(new CaseInputMask())
...