Advertisement
sigitsuryono25

NumberTextWatchers

Apr 17th, 2022
1,106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.64 KB | None | 0 0
  1. import android.text.Editable;
  2. import android.text.TextWatcher;
  3. import android.widget.EditText;
  4.  
  5. import java.text.DecimalFormat;
  6. import java.text.ParseException;
  7.  
  8. public class NumberTextWatcher implements TextWatcher {
  9.  
  10.  
  11.     private final DecimalFormat dfnd;
  12.  
  13.     private final EditText et;
  14.  
  15.     public NumberTextWatcher(EditText et) {
  16.         dfnd = new DecimalFormat("#,###");
  17.         dfnd.setMaximumFractionDigits(0);
  18.         this.et = et;
  19.     }
  20.  
  21.     @SuppressWarnings("unused")
  22.     private static final String TAG = "NumberTextWatcher";
  23.  
  24.     public void afterTextChanged(Editable s) {
  25.         et.removeTextChangedListener(this);
  26.  
  27.         try {
  28.             int inilen, endlen;
  29.             inilen = et.getText().length();
  30.  
  31.             String v = s.toString().replace(".", "");
  32.             Number n = dfnd.parse(v);
  33.             int cp = et.getSelectionStart();
  34.             et.setText(dfnd.format(n).replace(",", "."));
  35.             endlen = et.getText().length();
  36.             int sel = (cp + (endlen - inilen));
  37.             if (sel > 0 && sel <= et.getText().length()) {
  38.                 et.setSelection(sel);
  39.             } else {
  40.                 // place cursor at the end?
  41.                 et.setSelection(et.getText().length() - 1);
  42.             }
  43.         } catch (NumberFormatException | ParseException nfe) {
  44.             // do nothing?
  45.             nfe.printStackTrace();
  46.         }
  47.  
  48.         et.addTextChangedListener(this);
  49.     }
  50.  
  51.     public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  52.     }
  53.  
  54.     public void onTextChanged(CharSequence s, int start, int before, int count) {
  55.        
  56.     }
  57.  
  58. }
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement