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, "-");
}
}
}
});