在我的应用程序中,用户可以在文本字段中输入美元金额。问题是,我需要输入来适应他们输入数字时的最终数字,而不是实际输入小数点。最好的解释方法是举个例子:
假设用户以包含以下内容的edittext字段开始:
.
用户希望在字段中输入$12.53(即数字1、2、5、3)。然后他/她输入1,字段应该如下所示:
1
然后:
12
下一步:
一点二五
最后:
十二点五三
所以正如你可能注意到的,当数字被输入时,小数位本身也相应地被输入。是否可以在输入数字时执行此操作?谢谢。

最佳答案

是的,这是完全可能的,即使您不必分别管理"$"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"/>

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

07-26 09:42
查看更多