Advertisement
retnet

EditText to thousand digit androidX

May 1st, 2020
798
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.53 KB | None | 0 0
  1. // EditText auto format to thousand digit
  2. // add to class
  3. import android.content.Context;
  4. import android.text.Editable;
  5. import android.text.InputFilter;
  6. import android.text.InputType;
  7. import android.text.TextWatcher;
  8. import android.util.AttributeSet;
  9. import android.widget.EditText;
  10.  
  11. import java.math.BigDecimal;
  12. import java.text.DecimalFormat;
  13.  
  14. public class RibuanEditText extends androidx.appcompat.widget.AppCompatEditText {
  15.     private static final int MAX_LENGTH = 20;
  16.     private static final int MAX_DECIMAL = 2;
  17.     public RibuanEditText(Context context) {
  18.         this(context, null);
  19.     }
  20.     public RibuanEditText(Context context, AttributeSet attrs) {
  21.         this(context, attrs, androidx.appcompat.R.attr.editTextStyle);
  22.     }
  23.     public RibuanEditText(Context context, AttributeSet attrs, int defStyleAttr) {
  24.         super(context, attrs, defStyleAttr);
  25.         init();
  26.     }
  27.     public void init() {
  28.         addTextChangedListener(new RibuanTextWatcher(this));
  29.         setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
  30.         setFilters(new InputFilter[] { new InputFilter.LengthFilter(MAX_LENGTH) });
  31.         setHint("0");
  32.     }
  33.     public static class RibuanTextWatcher implements TextWatcher {
  34.         private EditText mEditText;
  35.         RibuanTextWatcher(EditText editText) {
  36.             mEditText = editText;
  37.         }
  38.         @Override
  39.         public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
  40.         }
  41.         @Override
  42.         public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
  43.         }
  44.         @Override
  45.         public void afterTextChanged(Editable editable) {
  46.             String originalString = editable.toString();
  47.             String cleanString = originalString.replaceAll("[,]", "");
  48.             if (cleanString.isEmpty()) {
  49.                 return;
  50.             }
  51.             String formattedString = getFormatString(cleanString);
  52.             mEditText.removeTextChangedListener(this);
  53.             mEditText.setText(formattedString);
  54.             mEditText.setSelection(mEditText.getText().length());
  55.             mEditText.addTextChangedListener(this);
  56.         }
  57.  
  58.         /**
  59.          * Return the format string
  60.          */
  61.         private String getFormatString(String cleanString) {
  62.             if (cleanString.contains(".")) {
  63.                 return formatDecimal(cleanString);
  64.             } else {
  65.                 return formatInteger(cleanString);
  66.             }
  67.         }
  68.         private String formatInteger(String str) {
  69.             BigDecimal parsed = new BigDecimal(str);
  70.             DecimalFormat formatter;
  71.             formatter = new DecimalFormat("#,###");
  72.             return formatter.format(parsed);
  73.         }
  74.         private String formatDecimal(String str) {
  75.             if (str.equals(".")) {
  76.                 return ".";
  77.             }
  78.             BigDecimal parsed = new BigDecimal(str);
  79.             DecimalFormat formatter;
  80.             formatter =
  81.                     new DecimalFormat("#,###." + getDecimalPattern(str)); //example patter #,###.00
  82.             return formatter.format(parsed);
  83.         }
  84.         private String getDecimalPattern(String str) {
  85.             int decimalCount = str.length() - 1 - str.indexOf(".");
  86.             StringBuilder decimalPattern = new StringBuilder();
  87.             for (int i = 0; i < decimalCount && i < MAX_DECIMAL; i++) {
  88.                 decimalPattern.append("0");
  89.             }
  90.             return decimalPattern.toString();
  91.         }
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement