Cómo puede formatear automáticamente el número de teléfono entrando editar texto en android

En mi aplicación estoy entrando en el número de teléfono en el cuadro de diálogo, en el texto de edición introduzca en el número de teléfono móvil añadido automáticamente en "-" ejemplo: 999-999-9999 este formato de número de teléfono

final EditText text= (EditText)myDialog.findViewById(com.fitzgeraldsoftware.mobitrack.presentationlayer.R.id.Tv2); text.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { boolean flag = true; String eachBlock[] = text.getText().toString().split("-"); // Log.v("11111111111111111111","aa"+flag); for (int i = 0; i < eachBlock.length; i++) { Log.v("11111111111111111111","aa"+i); if (eachBlock[i].length() > 3) { // Log.v("11111111111111111111","cc"+flag); flag = false; } } if (flag) { // Log.v("11111111111111111111","dd"+flag); text.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DEL) // Log.v("11111111111111111111","ee"+keyDel); keyDel = 1; return false; } }); if (keyDel == 0) { if (((text.getText().length() + 1) % 4) == 0) { Log.v("11111111111111111111","bb"+((text.getText().length() + 1) % 4)); if (text.getText().toString().split("-").length <= 2) { // Log.v("11111111111111111111","ff"+text.getText().length()); text.setText(text.getText() + "-"); text.setSelection(text.getText().length()); } } Log.v("11111111111111111111","cc"+text.getText().length()); a = text.getText().toString(); } else { Log.v("11111111111111111111","dd"+a); a = text.getText().toString(); keyDel = 0; } } else { Log.v("11111111111111111111","ee"+a); text.setText(a); } } public void beforeTextChanged(CharSequence s, int start, int count,int after) { // TODO Auto-generated method stub } public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); 

La salida es: 999-999-999 cómo puede manejar la salida exacta es 999-999-9999 (3digits-3digits-4digits)

Por favor envíe alguna solución.

Intente un filtro de entrada. No lo he probado, pero algo así debería funcionar.

 text.setFilters(android.text.method.DialerKeyListener). 

Ver también

Android.text.method.DialerKeyListener

TextView.setFilters

Puede utilizar esta biblioteca llamada Entrada telefónica internacional para Android `alojada en github.

Su impresionante y se implementa onValidityChangeListener .

  • Formatee automáticamente el número como los tipos de usuario
  • Establecer automáticamente el marcador de posición de entrada a un número de ejemplo para el país seleccionado
  • Si selecciona un país en la lista desplegable, se actualizará el código de marcado en la entrada
  • Escribir un código de marcación diferente actualizará automáticamente el indicador mostrado
  • Incorporación fácil como una vista personalizada
  • Oyente disponible para detectar el cambio de validez
  • Detectar automáticamente el número de teléfono cuando la información disponible
  • Escuchar "hecho" incluso en el teclado

    //Including in layout <net.rimoto.intlphoneinput.IntlPhoneInput android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/my_phone_input" />

Sólo, agrega este textChangedListener a tu edit_text

  UsPhoneNumberFormatter addLineNumberFormatter = new UsPhoneNumberFormatter( new WeakReference<EditText>(etPhone)); edit_text.addTextChangedListener(addLineNumberFormatter); 

Aquí UsPhoneNumberFormatter es una clase, su se extiende TextWatcher

 class UsPhoneNumberFormatter implements TextWatcher { //This TextWatcher sub-class formats entered numbers as 1 (123) 456-7890 private boolean mFormatting; // this is a flag which prevents the // stack(onTextChanged) private boolean clearFlag; private int mLastStartLocation; private String mLastBeforeText; private WeakReference<EditText> mWeakEditText; public UsPhoneNumberFormatter(WeakReference<EditText> weakEditText) { this.mWeakEditText = weakEditText; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { if (after == 0 && s.toString().equals("1 ")) { clearFlag = true; } mLastStartLocation = start; mLastBeforeText = s.toString(); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO: Do nothing } @Override public void afterTextChanged(Editable s) { // Make sure to ignore calls to afterTextChanged caused by the work // done below if (!mFormatting) { mFormatting = true; int curPos = mLastStartLocation; String beforeValue = mLastBeforeText; String currentValue = s.toString(); String formattedValue = formatUsNumber(s); if (currentValue.length() > beforeValue.length()) { int setCusorPos = formattedValue.length() - (beforeValue.length() - curPos); mWeakEditText.get().setSelection(setCusorPos < 0 ? 0 : setCusorPos); } else { int setCusorPos = formattedValue.length() - (currentValue.length() - curPos); if(setCusorPos > 0 && !Character.isDigit(formattedValue.charAt(setCusorPos -1))){ setCusorPos--; } mWeakEditText.get().setSelection(setCusorPos < 0 ? 0 : setCusorPos); } mFormatting = false; } } private String formatUsNumber(Editable text) { StringBuilder formattedString = new StringBuilder(); // Remove everything except digits int p = 0; while (p < text.length()) { char ch = text.charAt(p); if (!Character.isDigit(ch)) { text.delete(p, p + 1); } else { p++; } } // Now only digits are remaining String allDigitString = text.toString(); int totalDigitCount = allDigitString.length(); if (totalDigitCount == 0 || (totalDigitCount > 10 && !allDigitString.startsWith("1")) || totalDigitCount > 11) { // May be the total length of input length is greater than the // expected value so we'll remove all formatting text.clear(); text.append(allDigitString); return allDigitString; } int alreadyPlacedDigitCount = 0; // Only '1' is remaining and user pressed backspace and so we clear // the edit text. if (allDigitString.equals("1") && clearFlag) { text.clear(); clearFlag = false; return ""; } if (allDigitString.startsWith("1")) { formattedString.append("1 "); alreadyPlacedDigitCount++; } // The first 3 numbers beyond '1' must be enclosed in brackets "()" if (totalDigitCount - alreadyPlacedDigitCount > 3) { formattedString.append("(" + allDigitString.substring(alreadyPlacedDigitCount, alreadyPlacedDigitCount + 3) + ") "); alreadyPlacedDigitCount += 3; } // There must be a '-' inserted after the next 3 numbers if (totalDigitCount - alreadyPlacedDigitCount > 3) { formattedString.append(allDigitString.substring( alreadyPlacedDigitCount, alreadyPlacedDigitCount + 3) + "-"); alreadyPlacedDigitCount += 3; } // All the required formatting is done so we'll just copy the // remaining digits. if (totalDigitCount > alreadyPlacedDigitCount) { formattedString.append(allDigitString .substring(alreadyPlacedDigitCount)); } text.clear(); text.append(formattedString.toString()); return formattedString.toString(); } } 

Poner como este formato

999-999-9999

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.