2011-05-24 11 views

Respuesta

50

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.

+0

en lugar de 1234567890 → (123) 456-7890 estoy recibiendo: –

+0

Este formatos como 123-456-7890 – loeschg

+1

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.: -/ –

19

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' 
} 
9

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); 
} 
+0

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

+1

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

+1

getCountry() devuelve "" para mí – styler1972

0

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) 
    } 
} 
+0

¿Por qué la necesidad de verificar acerca de LOLLIPOP? –

+0

@androiddeveloper verifique esta respuesta https://stackoverflow.com/questions/34521644/using-phonenumberutils-formatnumber-on-api-16 – whalemare

+0

Así que la respuesta es que es porque así es ... –

Cuestiones relacionadas