如何删除带掩码的编辑框内容

huangapple 未分类评论49阅读模式
英文:

How to delete masked edittext content

问题

以下是您要翻译的内容:

例如:"2020/55",我有一个编辑框,输入四个数字后面跟一个数字,这样就可以正常工作。我的问题出现在删除时。删除“/”后面的部分时,它会显示"/////",将"/"前面部分的数字作为替代显示。我添加了您的图片,如何删除它。

以及遮罩类

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) {

    }
}

图片链接:enter image description here

英文:

for example: "2020/55" I have an edittext shape, put one after 4 numbers, write a number after it and it works well. My problem starts at the time of deleting. When deleting the part after /, it shows"/////" the figures of the part before / as and instead.I add your picture, how can I delete it.
enter image description here

And mask class

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

你应该这样检查删除操作:

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());
英文:

You should check deletion like this:

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

public CaseInputMask() {

}

@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
    deleting = count &gt; 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 &lt; inputMask.length()) {
        if (inputMask.charAt(length) != &#39;#&#39;) {
            editable.append(inputMask.charAt(length));
        } else if (inputMask.charAt(length-1) != &#39;#&#39;) {
            editable.insert(length-1, inputMask, length-1, length);
        }
    }

    running = false;
   }
}

And

girilenMetin.addTextChangedListener(new CaseInputMask())

huangapple
  • 本文由 发表于 2020年5月4日 05:37:54
  • 转载请务必保留本文链接:https://java.coder-hub.com/61581961.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定