Android:将小数点添加到EditText字段,并使其随输入移动

cap*_*com 5 android android-edittext

在我的应用程序中,用户可以在文本字段中输入美元金额。关键是,在输入数字时,我需要输入以适应最终数字,而无需实际输入小数点。解释此问题的最佳方法是一个示例:

假设用户从包含以下内容的EditText字段开始:

用户想要在字段中输入$ 12.53(即数字1,2,5,3)。然后,他/她首先输入1,该字段应如下所示:

.1

然后:

.12

下一个:

1.25

最后:

12.53

因此,您可能会注意到,在输入数字时,小数会相应地放在自己的位置。输入数字时可以这样做吗?谢谢。

Anu*_*rag 2

是的,这是很有可能的,甚至你不必单独管理"$"and 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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

如果您需要知道如何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"/>
Run Code Online (Sandbox Code Playgroud)

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