studio phone number edittext android formatting android-edittext masking

phone - mask edittext android studio



Enmascarar un EditText con un número de teléfono Formatear un NaN como en un PhoneNumberUtils (4)

Quiero hacer que el número de teléfono ingresado por el usuario en un editText cambie el formato dinámicamente cada vez que el usuario ingrese un número. Es decir, cuando el usuario ingresa hasta 4 dígitos, como 7144, editText muestra "714-4". Me gustaría que editText se actualice dinámicamente para formatear ### - ### - #### siempre que el usuario ingrese un dígito. ¿Cómo se puede hacer esto? Además, estoy manejando más de un editTexts.


La forma más fácil de hacerlo es usar el incorporado en Android PhoneNumberFormattingTextWatcher .

Así que, básicamente, obtienes tu EditText en código y configuras a tu observador de texto así ...

EditText inputField = (EditText) findViewById(R.id.inputfield); inputField.addTextChangedListener(new PhoneNumberFormattingTextWatcher());

Lo bueno de utilizar PhoneNumberFormattingTextWatcher es que formateará la entrada de su número correctamente según su configuración regional.


La respuesta anterior es correcta, pero funciona con un país específico. si alguien quiere ese número de teléfono formateado (### - ### - ####). Luego usa esto:

etPhoneNumber.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { int digits = etPhoneNumber.getText().toString().length(); if (digits > 1) lastChar = etPhoneNumber.getText().toString().substring(digits-1); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { int digits = etPhoneNumber.getText().toString().length(); Log.d("LENGTH",""+digits); if (!lastChar.equals("-")) { if (digits == 3 || digits == 7) { etPhoneNumber.append("-"); } } } @Override public void afterTextChanged(Editable s) { } });

Declare String lastChar = " " en su actividad.

Ahora agrega esta línea en xml de tu texto de edición

android:inputType="phone"

Eso es todo.

Editado: si desea que su longitud de texto de edición limite 10 dígitos, agregue la siguiente línea también:

android:maxLength="12"

(Es 12 porque "-" ocupará espacio dos veces)


Mi guión, ejemplo tomado de aquí descripción aquí

<android.support.design.widget.TextInputLayout android:id="@+id/numphone_layout" app:hintTextAppearance="@style/MyHintText" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp"> <android.support.design.widget.TextInputEditText android:id="@+id/edit_text_numphone" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/MyEditText" android:digits="+() 1234567890-" android:hint="@string/hint_numphone" android:inputType="phone" android:maxLength="17" android:textSize="14sp" /> </android.support.design.widget.TextInputLayout>

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextInputEditText phone = (TextInputEditText) findViewById(R.id.edit_text_numphone); //Add to mask phone.addTextChangedListener(textWatcher); } TextWatcher textWatcher = new TextWatcher() { private boolean mFormatting; // this is a flag which prevents the . private int mAfter; @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // nothing to do here.. } //called before the text is changed... @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //nothing to do here... mAfter = after; // flag to detect backspace.. } @Override public void afterTextChanged(Editable s) { // Make sure to ignore calls to afterTextChanged caused by the work done below if (!mFormatting) { mFormatting = true; // using US or RU formatting... if(mAfter!=0) // in case back space ain''t clicked... { String num =s.toString(); String data = PhoneNumberUtils.formatNumber(num, "RU"); if(data!=null) { s.clear(); s.append(data); Log.i("Number", data);//8 (999) 123-45-67 or +7 999 123-45-67 } } mFormatting = false; } } };


Simplemente agregue lo siguiente a EditText para Número de teléfono para obtener un número de teléfono formateado (### - ### - ####)

Phone.addTextChangedListener(new TextWatcher() { int length_before = 0; @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { length_before = s.length(); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if (length_before < s.length()) { if (s.length() == 3 || s.length() == 7) s.append("-"); if (s.length() > 3) { if (Character.isDigit(s.charAt(3))) s.insert(3, "-"); } if (s.length() > 7) { if (Character.isDigit(s.charAt(7))) s.insert(7, "-"); } } } });