将小数点和零添加到EditText字段,并使其与输入

时间:2017-09-22 05:59:16

标签: java android

我需要输入以在输入数字时适应最终数字,而不实际输入小数点。解释这个的最好方法是举个例子:

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

用户想要在字段中输入1234.01(即数字0,1,2,3,4)。然后他/她从输入1开始,该字段应如下所示:

0.01

然后:

0.12

下一步:

1.23

下一步:

12.34

下一步:

123.40

最后:

1234.01

因此,您可能会注意到,随着数字的输入,小数位也相应。是否可以在输入数字时执行此操作?感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用TextWatcher实现此目的。

xml文件中,创建一个EditText,如:

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

现在,在您的Java文件中使用editText执行类似的操作:

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.getNumberInstance().format(bigDecimal).replaceAll("[,]","");
            editText.setText(converted);
            editText.setSelection(converted.length());
            editText.addTextChangedListener(this);
        }
    });