如何使用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) } }