Agregar automáticamente guión en el número de teléfono en Android

En lugar de 5118710, debe ser 511-8710 . Me gustaría añadir un guión después de que el usuario el usuario introdujo 3 dígitos ya en el EditText. La longitud máxima del EditText es de sólo 7 dígitos.

Después de que descubrí el problema anterior, me quedé atrapado en la codificación de nuevo. Cuando ya introdujo 3 dígitos, agrega guión (eso es lo que me gustaría que suceda), pero mi problema aquí es que los próximos 3 dígitos también anexa guión (Así: 511-871- ) … Por favor, ayúdame con esto . ¡Gracias!

  txt_HomeNo.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { boolean flag = true; String eachBlock[] = txt_HomeNo.getText().toString().split("-"); for (int i = 0; i < eachBlock.length; i++) { if (eachBlock[i].length() > 3) { flag = false; } } if (flag) { txt_HomeNo.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DEL) keyDel = 1; return false; } }); if (keyDel == 0) { if (((txt_HomeNo.getText().length() + 1) % 4) == 0) { if (txt_HomeNo.getText().toString().split("-").length <= 3) { txt_HomeNo.setText(txt_HomeNo.getText() + "-"); txt_HomeNo.setSelection(txt_HomeNo.getText().length()); } } a = txt_HomeNo.getText().toString(); } else { a = txt_HomeNo.getText().toString(); keyDel = 0; } } else { txt_HomeNo.setText(a); } } 

5 Solutions collect form web for “Agregar automáticamente guión en el número de teléfono en Android”

Implementar el siguiente addTextChangedListener modificado para txt_HomeNo . El código siguiente está comprobando si la longitud del texto introducido es 3 y si es entonces agregue el - a él. No es una solución muy robusta, pero funciona!

 txt_HomeNo.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { txt_HomeNo.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DEL) keyDel = 1; return false; } }); if (keyDel == 0) { int len = txt_HomeNo.getText().length(); if(len == 3) { txt_HomeNo.setText(txt_HomeNo.getText() + "-"); txt_HomeNo.setSelection(txt_HomeNo.getText().length()); } } else { keyDel = 0; } } @Override public void afterTextChanged(Editable arg0) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } }); 

La solución más sencilla es utilizar PhoneNumberFormattingTextWatcher que formateará el número de acuerdo con la configuración regional del sistema.

XML:

 <EditText android:id="@+id/phone_number" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/enter_phone_number" android:inputType="phone" /> 

Agregue addTextChangedListener() en su clase:

 EditText phoneNumber = (EditText)findViewById(R.id.phone_number); phoneNumber.addTextChangedListener(new PhoneNumberFormattingTextWatcher()); 

Tengo algunos pequeños cambios en la solución de neo108 para que pueda trabajar tanto con teclado suave como con teclado duro, en mi código por ejemplo el edittext seguirá la regla para añadir automáticamente "" en la posición 5 y 9.

 txtPhone.addTextChangedListener(new TextWatcher() { int keyDel; @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { txtPhone.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View view, int keyCode, KeyEvent keyEvent) { if (keyCode == KeyEvent.KEYCODE_DEL) { keyDel = 1; } return false; } }); String currentString = txtPhone.getText().toString(); int currentLength = txtPhone.getText().length(); if (currentLength == 5 || currentLength == 9) { keyDel = 1; } if (keyDel == 0) { if (currentLength == 4 || currentLength == 8) { txtPhone.setText(txtPhone.getText() + " "); txtPhone.setSelection(txtPhone.getText().length()); } } else { if (currentLength != 5 && currentLength != 9) { keyDel = 0; } else if ((currentLength == 5 || currentLength == 9) && !" ".equals(currentString.substring(currentLength - 1, currentLength))) { txtPhone.setText(currentString.substring(0, currentLength - 1) + " " + currentString.substring(currentLength - 1, currentLength)); txtPhone.setSelection(txtPhone.getText().length()); } } } 

Hágalo usted mismo usando OnEditTextChangedListener e inserte el guión contando el número de caracteres, Contando Chars en EditText Changed Listener

Gracias por la respuesta anterior.

  • El editText.setOnKeyListener () nunca se invocará cuando el dispositivo sólo tenga teclado suave.
  • Si seguimos estrictamente la regla para agregar "-" , entonces este código no siempre muestra el resultado del deseo.

    EditText.addTextChangedListener (nuevo PhoneNumberFormattingTextWatcher ());

Pero encima del código es la mejor solución para el formato de teléfono no.

Aparte de encima de esta solución, escribo un código que trabaja en todos los tipos de condición ::

 phoneNumber.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if (len > phoneNumber.getText().length() ){ len--; return; } len = phoneNumber.getText().length(); if (len == 4 || len== 8) { String number = phoneNumber.getText().toString(); String dash = number.charAt(number.length() - 1) == '-' ? "" : "-"; number = number.substring(0, (len - 1)) + dash + number.substring((len - 1), number.length()); phoneNumber.setText(number); phoneNumber.setSelection(number.length()); } } }); 

Esta línea de código requerida para agregar "-" en la posición 3 y 6 del número. If (len == 4 || len == 8)

  • Android TextWatcher.afterTextChanged vs TextWatcher.onTextChanged
  • Implementación de Text Watcher para EditText
  • TextWatcher para más de un EditText
  • Formatear el número de teléfono de EditText como tipos de usuario
  • Android utiliza el observador de texto para evitar escribir caracteres especiales
  • Cómo sólo permitir números positivos en un EditText
  • Eventos de TextWatcher se están llamando dos veces
  • ¿Cómo mostrar "No Result" en ListView filtrable?
  • Formato de la fecha de caducidad en formato mm / aa
  • Permitir sólo 1 carácter en EditText y siempre sobrescribir cuando el usuario de entrada
  • Cómo aplicar el evento de cambio de texto en EditText
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.