minafaw3

MoneyTextWatcher

Nov 26th, 2015
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.99 KB | None | 0 0
  1.  
  2. import android.text.Editable;
  3. import android.text.TextWatcher;
  4. import android.widget.EditText;
  5.  
  6. import java.text.DecimalFormat;
  7. import java.text.ParseException;
  8.  
  9. /**
  10.  * Created by Mina on 21/09/2015.
  11.  */
  12.  
  13. public class MoneyTextWatcher implements TextWatcher {
  14.  
  15.     private EditText et;
  16.     private final DecimalFormat df ;
  17.     private final DecimalFormat dfnd ;
  18.     boolean hasFractionalPart;
  19.     private int traillingZeroCount;
  20.  
  21.  
  22.     public MoneyTextWatcher(EditText mEditText, String Pattern) {
  23.         this.et = mEditText;
  24.         df = new DecimalFormat(Pattern);
  25.         df.setDecimalSeparatorAlwaysShown(true);
  26.         dfnd= new DecimalFormat("#,###.00");
  27.         hasFractionalPart = false;
  28.  
  29.     }
  30.  
  31.     @Override
  32.     public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  33.  
  34.     }
  35.  
  36.     @Override
  37.     public void onTextChanged(CharSequence s, int start, int before, int count) {
  38.         int index = s.toString().indexOf(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator()));
  39.         traillingZeroCount = 0;
  40.         if (index > -1) {
  41.             for (index++; index < s.length(); index++) {
  42.                 if (s.charAt(index) == '0')
  43.                     traillingZeroCount++;
  44.                 else {
  45.                     traillingZeroCount = 0;
  46.                 }
  47.             }
  48.             hasFractionalPart = true;
  49.         } else {
  50.             hasFractionalPart = false;
  51.         }
  52.  
  53.  
  54.     }
  55.  
  56.     @Override
  57.     public void afterTextChanged(Editable s) {
  58.         et.removeTextChangedListener(this);
  59.  
  60.         if (s != null && !s.toString().isEmpty()) {
  61.             try {
  62.                 int inilen, endlen;
  63.                 inilen = et.getText().length();
  64.                 String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "").replace("$","");
  65.                 Number n = df.parse(v);
  66.                 int cp = et.getSelectionStart();
  67.                 if (hasFractionalPart) {
  68.                     StringBuilder trailingZeros = new StringBuilder();
  69.                     while (traillingZeroCount-- > 0)
  70.                         trailingZeros.append('0');
  71.                     et.setText(df.format(n) + trailingZeros.toString());
  72.                 } else {
  73.                     et.setText(dfnd.format(n));
  74.                 }
  75.                 et.setText("$".concat(et.getText().toString()));
  76.                 endlen = et.getText().length();
  77.                 int sel = (cp + (endlen - inilen));
  78.                 if (sel > 0 && sel < et.getText().length()) {
  79.                     et.setSelection(sel);
  80.                 } else if (traillingZeroCount > -1) {
  81.                     et.setSelection(et.getText().length() - 3);
  82.                 } else {
  83.                     et.setSelection(et.getText().length());
  84.                 }
  85.             } catch (NumberFormatException | ParseException e) {
  86.                 e.printStackTrace();
  87.             }
  88.         }
  89.  
  90.         et.addTextChangedListener(this);
  91.     }
  92.  
  93.  
  94. }
Add Comment
Please, Sign In to add comment