Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Adding decimal point to EditText field, and make it move with input

In my app, the user is able to enter a dollar amount in a text field. The thing is, I need the input to adapt to the final number as they enter the digits, without actually entering the decimal point. The best way to explain this is with an example:

Suppose the user starts off with an EditText field which contains this:

.

The user wants to enter $12.53 into the field (i.e. the digits 1,2,5,3). Then he/she starts by entering 1, and the field should look like this:

.1

Then:

.12

Next:

1.25

Finally:

12.53

So as you may notice, the decimal places itself accordingly as the numbers are inputted. Is it possible to do this as the numbers are being entered? Thanks.

like image 683
capcom Avatar asked Oct 11 '12 00:10

capcom


1 Answers

Yes, this is quite possible, even you don't have to manage "$" and decimal separately.

Below is simple EditText which is manipulated by 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);
        }
    });

And if you require to know how EditText should be created in xml, have this :

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

This is an old question, but perhaps, it's better to be answered:)

like image 97
Anurag Avatar answered Nov 10 '22 00:11

Anurag