Formatear automáticamente el número de teléfono en EditText

En mi aplicación, el usuario tiene que ingresar un número de teléfono en un campo EditText utilizando el siguiente formato:

1 (515) 555-5555

No quiero que el usuario escriba "(", ")" o "-" al ingresar el número; Quiero que estos caracteres se agreguen automáticamente.

Por ejemplo, supongamos que el usuario escribió 1 – los paréntesis después de "1" deberían agregarse automáticamente, de modo que se mostrara "1" y me gustaría tener una funcionalidad similar al borrar.

He intentado fijar el texto en el método onTextWatcher interfaz de onTextWatcher , pero no está trabajando; En su lugar está causando un error. Cualquier ayuda será apreciada.

Probablemente se encuentre en un problema porque afterTextChanged es reentrante, es decir, los cambios realizados en el texto hacen que el método se vuelva a llamar.

Si ese es el problema, una manera de hacerlo es mantener un indicador de variable de instancia:

 public class MyTextWatcher implements TextWatcher { private boolean isInAfterTextChanged; public synchronized void afterTextChanged(Editable text) { if (!isInAfterTextChanged) { isInAfterTextChanged = true; // TODO format code goes here isInAfterTextChanged = false; } } } 

Como alternativa, sólo puede utilizar PhoneNumberFormattingTextWatcher – no hace el formato que describió, pero de nuevo no tiene que hacer mucho para usarlo.

puedes probar

 editTextPhoneNumber.addTextChangedListener(new PhoneNumberFormattingTextWatcher()); 

Compruebe PhoneNumnerFormattingTextWatxher

En caso de que desee su propia implementación de TextWatcher entonces usted puede utilizar appollando folling:

 import android.telephony.PhoneNumberFormattingTextWatcher; import android.text.Editable; /** * Set this TextWatcher to EditText for Phone number * formatting. * * Along with this EditText should have * * inputType= phone * * maxLength=14 */ public class MyPhoneTextWatcher extends PhoneNumberFormattingTextWatcher { private EditText editText; /** * * @param EditText * to handle other events */ public MyPhoneTextWatcher(EditText editText) { // TODO Auto-generated constructor stub this.editText = editText; } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub super.onTextChanged(s, start, before, count); //--- write your code here } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub super.beforeTextChanged(s, start, count, after); } @Override public synchronized void afterTextChanged(Editable s) { // TODO Auto-generated method stub super.afterTextChanged(s); } } 
  • Etiquetas de formato Html ignoradas en el cuadro de diálogo
  • Android: Obtener el día de la semana a partir de la fecha?
  • ¿Cómo se muestra correctamente la posición / duración de un MediaPlayer?
  • Mostrar la fecha Y la hora en la configuración regional del usuario
  • Mostrar <ul> <li> en la vista de texto de android
  • Detenga Android Studio de métodos de empaquetado y constructores
  • Cómo formatear una fecha de calendario
  • Punto flotante con 2 dígitos después del punto
  • Diálogo de alerta con un campo numérico de EditText
  • Formato de fecha y hora según la configuración regional
  • Cómo dar formato a longs en android para siempre mostrar dos dígitos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.