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

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

我所拥有的:
我有一个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 如果用户删除所有输入(以防止计算函数出错)。

  1. private class EditTextListener implements TextWatcher {
  2. @Override
  3. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  4. }
  5. @Override
  6. public void onTextChanged(CharSequence s, int start, int before, int count) {
  7. }
  8. @Override
  9. public void afterTextChanged(Editable s) {
  10. if (editText.getText().toString().equals("") || editText.length() < 1){
  11. editText.setText("0.00");
  12. editText.post(() -> editText.setSelection(editText.getText().length()));
  13. } else {
  14. BigDecimal amount = new BigDecimal(editText.getText().toString());
  15. }
  16. }
  17. }
j2qf4p5b

j2qf4p5b1#

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

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

相关问题