Как я могу отформатировать номер телефона с помощью PhoneNumberUtils?
Например: 1234567890
→ (123) 456-7890
Как я могу отформатировать номер телефона с помощью PhoneNumberUtils?
Например: 1234567890
→ (123) 456-7890
В самом основном:
String formattedNumber = PhoneNumberUtils.formatNumber(unformattedNumber);
Это будет автоматически отформатировать номер в соответствии с правилами для страны, из которой это номер.
Вы также можете форматировать редактируемый текст с помощью:
PhoneNumberUtils.formatNumber(Editable text, int defaultFormattingType);
Посмотрите PhoneNumberUtils
дополнительные параметры.
Я решил использовать версию google (https://github.com/googlei18n/libphonenumber), потому что тогда минимальный SDK может быть ниже (я думаю, что это не в Android SDK до 21).
Используйте что-то вроде этого:
PhoneNumberUtil pnu = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber pn = pnu.parse("1234567890", "US");
String pnE164 = pnu.format(pn, PhoneNumberUtil.PhoneNumberFormat.E164);
В Android Studio нужно добавить это в зависимости от build.gradle:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
...
compile 'com.googlecode.libphonenumber:libphonenumber:7.2.2'
}
Похоже, что эта библиотека из Google может быть лучшим решением для настройки персонализированного форматирования на Android.
API docs: https://github.com/googlei18n/libphonenumber/blob/master/README.md
formatNumber устарел на LOLLIPOP, после этого вам нужно добавить локаль в качестве дополнительного аргумента.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return PhoneNumberUtils.formatNumber(yourStringPhone,Locale.getDefault().getCountry());
} else {
//Deprecated method
return PhoneNumberUtils.formatNumber(yourStringPhone);
}
Автономное решение для формата сырого телефонного номера, если вы не знаете свою страну и нуждаетесь в поддержке на предварительном леллипопе.
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)
}
}