如何使用PhoneNumberUtils格式化电话号码?
如何使用PhoneNumberUtils格式化电话号码?
例如: 1234567890
→ (123) 456-7890
在最基本的方面:
String formattedNumber = PhoneNumberUtils.formatNumber(unformattedNumber);
这将根据该号码来自的国家的规则自动格式化该号码。
您还可以使用以下格式对可编辑文本进行格式化:
PhoneNumberUtils.formatNumber(Editable text, int defaultFormattingType);
看看PhoneNumberUtils
的更多选项。
我select使用谷歌的版本( https://github.com/googlei18n/libphonenumber ),因为那么min 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中进行自定义格式设置的更好的解决scheme。
API文档: https : //github.com/googlei18n/libphonenumber/blob/master/README.md
formatNumber在LOLLIPOP上被弃用,之后你需要添加locale作为额外的参数。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { return PhoneNumberUtils.formatNumber(yourStringPhone,Locale.getDefault().getCountry()); } else { //Deprecated method return PhoneNumberUtils.formatNumber(yourStringPhone); }
原始电话号码格式的独立解决scheme,如果你不知道你的国家,需要支持前棒棒糖。
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) } }