Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo dar formato a la entrada de EditText al escribir con separadores de miles (,) en Android?

Tengo un edittext , sólo obtiene numérico sin números decimales.

 android:inputType="number" 

Quiero separar a miles mientras estoy escribiendo. Por ejemplo, 25.000.

Sé que debería usar TextWatcher y he usado este código, pero no pude hacer que funcione:

 @Override public void afterTextChanged(Editable viewss) { String s = null; try { // The comma in the format specifier does the trick s = String.format("%,d", Long.parseLong(viewss.toString())); } catch (NumberFormatException e) { } } 

¿Podría ayudarme a hacerlo?

  • Android stackoverflow utilizando while loop
  • Cómo eliminar todos los oyentes agregados con addTextChangedListener
  • Validación de EditText con TextWatcher
  • Diferencias entre TextWatcher 's onTextChanged, beforeTextChanged y afterTextChanged
  • ¿Cómo utilizo AsYouTypeFormatter TextWatcher en la aplicación de Android?
  • Detectar si el contenido de EditText fue modificado por el usuario o por programa?
  • Android - Hacer algo * después de * texto se cambia en EditText
  • Eventos de TextWatcher se están llamando dos veces
  • One Solution collect form web for “Cómo dar formato a la entrada de EditText al escribir con separadores de miles (,) en Android?”

    Pruebe este ejemplo:

     import java.text.DecimalFormat; import java.text.ParseException; import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; public class NumberTextWatcher implements TextWatcher { private DecimalFormat df; private DecimalFormat dfnd; private boolean hasFractionalPart; private EditText et; public NumberTextWatcher(EditText et) { df = new DecimalFormat("#,###.##"); df.setDecimalSeparatorAlwaysShown(true); dfnd = new DecimalFormat("#,###"); this.et = et; hasFractionalPart = false; } @SuppressWarnings("unused") private static final String TAG = "NumberTextWatcher"; @Override public void afterTextChanged(Editable s) { et.removeTextChangedListener(this); try { int inilen, endlen; inilen = et.getText().length(); String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), ""); Number n = df.parse(v); int cp = et.getSelectionStart(); if (hasFractionalPart) { et.setText(df.format(n)); } else { et.setText(dfnd.format(n)); } endlen = et.getText().length(); int sel = (cp + (endlen - inilen)); if (sel > 0 && sel <= et.getText().length()) { et.setSelection(sel); } else { // place cursor at the end? et.setSelection(et.getText().length() - 1); } } catch (NumberFormatException nfe) { // do nothing? } catch (ParseException e) { // do nothing? } et.addTextChangedListener(this); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.toString().contains(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator()))) { hasFractionalPart = true; } else { hasFractionalPart = false; } } } 

    Para usarlo, agregue un TextChangedListener al componente EditText.

     editText.addTextChangedListener(new NumberTextWatcher(editText)); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.