Нажмите ноль любое количество раз в редактируемом тексте, но он должен быть виден пользователю только в 1 цифре, как калькулятор - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть текст для редактирования суммы.Итак, я добавил наблюдателя текста, но я не хочу, чтобы пользователь «0000000 ...», если пользователь будет постоянно нажимать «0000 ...», вместо этого он должен показывать только один раз «0», как калькулятор

Как я могу это сделать?

private void setAmount() {
    etAmount.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) {
            if (s.length() == 1) {
                if (s.toString().equals("0")) {
                    etAmount.setText("0");
                }
            }

            //Not working
        }

        @Override
        public void afterTextChanged(Editable s) {}
    });
}

Я думаю, что моя логика также неверна, потому что, когда я вхожу в одиночный ввод и проверяю s.length, а после et.setText("0") он переходит в бесконечный цикл.

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Попробуйте это:

    etAmount.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) {
            String text = s.toString();
            if (text.length() == 2 && text.charAt(0) == '0') {
                etAmount.setText(text.substring(1));
                etAmount.setSelection(1);
            }
        }
    });
0 голосов
/ 10 февраля 2019

Вы можете сделать это так:

etAmount.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) {}

    @Override
    public void afterTextChanged(Editable s) {
        if (s.length() == 2) {
            if (s.toString().startsWith("00")) {
                etAmount.setText("0");
            }
        }
    }
});
...