【问题标题】:How to make a formated EditText start from Right to Left using TextWatcher?如何使用 TextWatcher 使格式化的编辑文本从右到左开始?
【发布时间】:2021-03-20 15:09:27
【问题描述】:

我有什么:

我有一个接受十进制输入的 EditText,我将 XML 中的默认值设置为 0.00(如果还没有输入)

如果用户按下1,则值更改为1。如果他需要输入十进制值,那么他必须按键盘上的点.

我想要什么:

我想将 EditText 自动格式化为十进制格式 0.00,因此如果用户按 1,如果变为 0.01 而不是 1(就像在 PAYPAL 应用程序中一样)。如果他输入100,那么EditText中的值必须格式化为1.00

我知道这可以通过使用TextWatcher 来完成,但我不知道如何实现。

最终结果比较:

我有什么

1 = 1

11 = 11

222 = 222

我需要什么

1 = 0.01

11 = 0.11

222 = 2.22

更新:

我的实际 TextWatcher 如下所示,只是为了在用户删除所有输入时将默认值设置为 0.00(以防止计算函数出错)。

private class EditTextListener implements 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) {

            if (editText.getText().toString().equals("") || editText.length() < 1){
                editText.setText("0.00");
                editText.post(() -> editText.setSelection(editText.getText().length()));
            } else {

                BigDecimal amount = new BigDecimal(editText.getText().toString());
            }
        }
    }

【问题讨论】:

  • 发布一些代码来展示你所做的事情

标签: java android android-edittext android-textwatcher


【解决方案1】:

正如你所描述的,你需要用小数点除以 100:

@Override
public void afterTextChanged(Editable s) {
    
    if (editText.getText().toString().equals("") || editText.length() < 1) {
        editText.setText("0.00");
        editText.post(() -> editText.setSelection(editText.getText().length()));
    } else {
        
        double amount = Double.parseDouble(editText.getText().toString());
        editText.setText(String.format("%.2f", (amount / 100.0));
    }
}

【讨论】:

  • 它可以按我的意愿进行转换,但不能设置回editText的值。在这个例子中,如果用户按下 5,当输出为 (0,05) 时,我得到一个 NumberFormatException for input String。如果我转换为 Locale.ENGLISH,我得到输出 (0.05),但应用程序进入无限循环,然后消耗大量内存它关闭了。
猜你喜欢
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多