安卓:添加小数点的EditText领域,并使其与输入移动(Android: Adding decim

2019-09-23 22:18发布

在我的应用程序,用户可以在文本字段中输入金额。 问题是,我需要的输入,因为他们进入数字以适应最终数目,实际上并没有进入小数点。 解释这一点的最好办法是用一个例子:

假设用户使用包含此一个EditText领域开始了:

用户想要输入$ 12.53到现场(即数字1,2,5,3)。 然后,他/她开始通过输入1,现场应该是这样的:

0.1

然后:

0.12

下一个:

1.25

最后:

12.53

所以你可能会注意到,在小数位自身相应的数字输入。 是否有可能为正在输入的数字来做到这一点? 谢谢。

Answer 1:

是的,这是完全可能的,即使你没有管理"$"decimal分开。

下面是简单EditText是通过操纵TextWatcher

final EditText editText = (EditText) findViewById(R.id.edt);
    editText.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) {
            if (editText == null) return;
            String inputString = editable.toString();
            editText.removeTextChangedListener(this);
            String cleanString = inputString.toString().replaceAll("[$,.]", "");
            BigDecimal bigDecimal = new BigDecimal(cleanString).setScale(2, BigDecimal.ROUND_FLOOR).divide(new BigDecimal(100), BigDecimal.ROUND_FLOOR);
            String  converted = NumberFormat.getCurrencyInstance().format(bigDecimal);
            editText.setText(converted);
            editText.setSelection(converted.length());
            editText.addTextChangedListener(this);
        }
    });

如果你需要知道如何EditText应在创建xml ,有这样的:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/edt"
    android:inputType="numberDecimal"
    android:textDirection="anyRtl"
    android:gravity="right"/>

这是一个老问题,但也许,这是更好地回答:)



文章来源: Android: Adding decimal point to EditText field, and make it move with input