Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Automatically add thousand separators as number is input in EditText

Im creating a convertor application. I want to set the EditText so that when the user is inputting the number to be converted, a thousand separator (,) should be added automatically in realtime to the number once it increments by 3 figures: thousand, million, billion etc.
And when erased to below 4 figures the number goes back to normal.
Any help?

like image 337
Asiimwe Avatar asked Sep 09 '12 10:09

Asiimwe


People also ask

How do you add a thousand separator to numbers in Word?

Place the cursor at the location you want to insert the 1000 separator, click Insert > Symbol > More Symbols. 2. In the Symbol dialog, under Symbols tab select Verdana from Font drop-down list, then select Basic Latin from Subset drop-down list, now select the 1000 separator from the list, click Insert to insert it.

What are thousands separators?

The character used as the thousands separatorIn the United States, this character is a comma (,). In Germany, it is a period (.). Thus one thousand and twenty-five is displayed as 1,025 in the United States and 1.025 in Germany. In Sweden, the thousands separator is a space.


2 Answers

Solved The Issue Finally

Even-though It is too late answer. I've researched much to accomplish the task To get the proper result but could not. So I finally solved the issue we were searching and provided this answer to the google searchers for saving their times on searching.

Fetures of the following codes

  1. Puts thousand separator in EditText as it's text changes.

  2. adds 0. Automatically when pressed period (.) At First.

  3. Ignores 0 input at Beginning.

Just copy the following Class named

NumberTextWatcherForThousand which implements TextWatcher

import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; import java.util.StringTokenizer;  /**  * Created by skb on 12/14/2015.  */ public class NumberTextWatcherForThousand implements TextWatcher {      EditText editText;       public NumberTextWatcherForThousand(EditText editText) {         this.editText = editText;       }      @Override     public void beforeTextChanged(CharSequence s, int start, int count, int after) {      }      @Override     public void onTextChanged(CharSequence s, int start, int before, int count) {      }      @Override     public void afterTextChanged(Editable s) {         try         {             editText.removeTextChangedListener(this);             String value = editText.getText().toString();               if (value != null && !value.equals(""))             {                  if(value.startsWith(".")){                     editText.setText("0.");                 }                 if(value.startsWith("0") && !value.startsWith("0.")){                     editText.setText("");                  }                   String str = editText.getText().toString().replaceAll(",", "");                 if (!value.equals(""))                 editText.setText(getDecimalFormattedString(str));                 editText.setSelection(editText.getText().toString().length());             }             editText.addTextChangedListener(this);             return;         }         catch (Exception ex)         {             ex.printStackTrace();             editText.addTextChangedListener(this);         }      }      public static String getDecimalFormattedString(String value)     {         StringTokenizer lst = new StringTokenizer(value, ".");         String str1 = value;         String str2 = "";         if (lst.countTokens() > 1)         {             str1 = lst.nextToken();             str2 = lst.nextToken();         }         String str3 = "";         int i = 0;         int j = -1 + str1.length();         if (str1.charAt( -1 + str1.length()) == '.')         {             j--;             str3 = ".";         }         for (int k = j;; k--)         {             if (k < 0)             {                 if (str2.length() > 0)                     str3 = str3 + "." + str2;                 return str3;             }             if (i == 3)             {                 str3 = "," + str3;                 i = 0;             }             str3 = str1.charAt(k) + str3;             i++;         }      }      public static String trimCommaOfString(String string) { //        String returnString;         if(string.contains(",")){             return string.replace(",","");}         else {             return string;         }      } } 

Use This Class on your EditText as follows

editText.addTextChangedListener(new NumberTextWatcherForThousand(editText)); 

To get the input as plain Double Text

Use the trimCommaOfString method of the same class like this

NumberTextWatcherForThousand.trimCommaOfString(editText.getText().toString()) 

Git

like image 131
Shree Krishna Avatar answered Sep 20 '22 22:09

Shree Krishna


You can use String.format() in a TextWatcher. The comma in the format specifier does the trick.

This does not work for floating point input. And be careful not to set an infinite loop with the TextWatcher.

public void afterTextChanged(Editable view) {     String s = null;     try {         // The comma in the format specifier does the trick         s = String.format("%,d", Long.parseLong(view.toString()));     } catch (NumberFormatException e) {     }     // Set s back to the view after temporarily removing the text change listener } 
like image 45
Dheeraj Vepakomma Avatar answered Sep 22 '22 22:09

Dheeraj Vepakomma