如何使用textwatcher使格式化的edittext从右向左开始?

sd2nnvve  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(300)

我所拥有的:
我有一个edittext,它接受十进制输入,并将xml中的默认值设置为 0.00 (如果还没有输入)
如果用户按 1 ,则值更改为 1 . 如果他需要输入小数点,那么他必须按这个点 . 在键盘上。
我想要的是:
我想以十进制格式自动格式化编辑文本 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());
            }
        }
    }
j2qf4p5b

j2qf4p5b1#

正如您所描述的,您需要用小数点除以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));
    }
}

相关问题