Android Форматирование суммы Edittext - PullRequest
0 голосов
/ 01 мая 2020

, поэтому я делаю приложение Android. Моя проблема в том, что я пытаюсь отформатировать текст редактирования, который получает сумму. Поведение, которое я желаю: - если пользователь вводит 5, автоматически форматирует, чтобы показать 5,00 долл. США, при этом позволяя пользователю редактировать сумму, пользовательский ввод 6 теперь должен показывать 5,60 долл., Пользовательский ввод 6 снова показывает 5,66 долл. Пользователь переходит к следующему шагу, который выбирает вариант в радиогруппе и решает, что на самом деле это должно быть 6 долларов вместо 5,66 долларов, пользователь удаляет 5,66 долларов и ввод 6, который форматируется до 6,00 долларов и так далее. Мне бы очень понравилась ваша помощь и заранее спасибо;)

Решение 1:

amountEt.addTextChangedListener(new TextWatcher() {
            @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void afterTextChanged(Editable editable) {
            amountEt.removeTextChangedListener(this);
            amountEt.getText().replace("$", "");
            amountEt.setText(FormatterUtils.formatNumberToDisplay(amountEt.getText());
            amountEt.addTextChangedListener(this);

        }
    });

public static String formatNumberToDisplay(String unformattedValue) {

    if (unformattedValue == null || unformattedValue.isEmpty()) {
        return null;
    }

    unformattedValue = unformattedValue.replaceAll(",", ".");

    BigDecimal unformattedValueBig = new BigDecimal(unformattedValue);

    unformattedValueBig = unformattedValueBig.setScale(2,
            RoundingMode.HALF_DOWN);

    Context context = MobileApplicationClass.getInstance().getContext();
    Locale currentLocale = context.getResources().getConfiguration().locale;

    NumberFormat formatter = NumberFormat.getInstance(currentLocale);
    formatter.setMaximumFractionDigits(2);
    formatter.setMinimumFractionDigits(2);

    return formatter.format(unformattedValueBig);

}

Problem : When user tries to go back because it is already formatted typing doesn't do anything, problem with the way I'm formatting don't know how to make it that even if is formatted to display two decimal places, if it user goes back on editText allow user to freely edit it.

Solution 2: 



  amountEt.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean b) {
                if (!b){
                    amountEt.getText().replace("$", "");
                    amountEt.setText(FormatterUtils.formatNumberToDisplay(amountEt.getText()));
                }
            }
        });

Проблема: невозможно заставить radioButton получить фокус без использования setFocusable (true) с requestFocus, который делает пользователь должен дважды щелкнуть, чтобы переключаться между radioButtons.

...