¿Cómo puedo formatear un número de teléfono usando PhoneNumberUtils?¿Cómo formatear un número de teléfono usando PhoneNumberUtils?
ej .: 1234567890
→ (123) 456-7890
¿Cómo puedo formatear un número de teléfono usando PhoneNumberUtils?¿Cómo formatear un número de teléfono usando PhoneNumberUtils?
ej .: 1234567890
→ (123) 456-7890
En su forma más básica:
String formattedNumber = PhoneNumberUtils.formatNumber(unformattedNumber);
Esto formateará automáticamente el número de acuerdo con las reglas para el país es el número de.
También puede dar formato al texto editable en el lugar usando:
PhoneNumberUtils.formatNumber(Editable text, int defaultFormattingType);
Tome un vistazo a PhoneNumberUtils
para más opciones.
Parece que this library from Google podría ser una mejor solución para hacer un formateo personalizado en Android.
documentos de la API: https://github.com/googlei18n/libphonenumber/blob/master/README.md
que optaron por utilizar la versión de Google (https://github.com/googlei18n/libphonenumber) porque entonces el min SDK puede ser más baja (creo que no está en el SDK de Android hasta el 21).
uso es algo como esto:
PhoneNumberUtil pnu = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber pn = pnu.parse("1234567890", "US");
String pnE164 = pnu.format(pn, PhoneNumberUtil.PhoneNumberFormat.E164);
En Android Studio uno necesita añadir esto a las dependencias en build.gradle:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
...
compile 'com.googlecode.libphonenumber:libphonenumber:7.2.2'
}
formatNumber quedó obsoleto en la paleta, después de eso es necesario agregar la configuración regional como argumento adicional.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return PhoneNumberUtils.formatNumber(yourStringPhone,Locale.getDefault().getCountry());
} else {
//Deprecated method
return PhoneNumberUtils.formatNumber(yourStringPhone);
}
Intenté esto pero el número de teléfono no se formatea en el dispositivo móvil, ya que funciona correctamente en la tableta, la tableta muestra el número formateado. – musica
Estoy en India y Locale.getDefault(). GetCountry() me da "EE. UU.".Ok, eso no es un problema, pero el número no se formatea. Devuelve un número de 10/11 dígitos como está. Y con el método en desuso, devuelve el formato. – pratik03
getCountry() devuelve "" para mí – styler1972
solución autónoma para el número de teléfono de formato en bruto, si no te conoce su país y necesita apoyo en la pre-piruleta.
fun formatNumberCompat(rawPhone: String?, countryIso: String = ""): String {
if (rawPhone == null) return ""
var countryName = countryIso
if (countryName.isBlank()) {
countryName = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Resources.getSystem().configuration.locales[0].country
} else {
Resources.getSystem().configuration.locale.country
}
}
return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
PhoneNumberUtils.formatNumber(rawPhone)
} else {
PhoneNumberUtils.formatNumber(rawPhone, countryName)
}
}
¿Por qué la necesidad de verificar acerca de LOLLIPOP? –
@androiddeveloper verifique esta respuesta https://stackoverflow.com/questions/34521644/using-phonenumberutils-formatnumber-on-api-16 – whalemare
Así que la respuesta es que es porque así es ... –
en lugar de 1234567890 → (123) 456-7890 estoy recibiendo: –
Este formatos como 123-456-7890 – loeschg
Mientras que la respuesta es correcta Creo que la respuesta realmente correcta para esta pregunta es que el formato es NO es lo suficientemente personalizable a menos que desee escribir su propia implementación. :-(STPhoneFormatter en CocoaPods para el desarrollo de iOS es una biblioteca bastante hábil para manejar esto por allá. No hay tanta alegría para Android.: -/ –