2011-05-24 151 views

回答

50

在最基本的:

String formattedNumber = PhoneNumberUtils.formatNumber(unformattedNumber); 

根據該國的數量從規則這將自動格式化數。

也可以使用格式化就地編輯的文本:

PhoneNumberUtils.formatNumber(Editable text, int defaultFormattingType); 

看看PhoneNumberUtils了更多的選擇。

+0

代替1234567890→(123)456-7890我越來越: – 2013-01-29 16:46:22

+0

此格式如123-456-7890 – loeschg 2013-04-24 16:33:14

+1

雖然答案是正確的,我認爲這個問題實際的正確答案是,格式化沒有足夠的可定製性,除非你想編寫你自己的實現。 :-(STPhoneFormatter在CocoaPods for iOS開發是一個非常漂亮的圖書館來處理這個。沒有這樣的喜悅的Android。 -/ – 2013-12-18 21:59:44

19

我選擇使用谷歌的版本(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' 
} 
9

formatNumber得到了過時的棒棒糖,之後你需要添加作爲額外參數的語言環境。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    return PhoneNumberUtils.formatNumber(yourStringPhone,Locale.getDefault().getCountry()); 
} else { 
//Deprecated method 
    return PhoneNumberUtils.formatNumber(yourStringPhone); 
} 
+0

我試過這個,但是電話號碼沒有在移動設備上格式化,因爲它在平板電腦上正常工作,平板電腦顯示格式化的數字。 – musica 2017-06-21 09:12:05

+1

我在印度和Locale.getDefault()。getCountry()給我「美國」。好的,這不是問題,但數字不會被格式化。它按原樣返回10/11數字號碼。使用不推薦的方法,它將返回格式。 – pratik03 2017-07-24 07:19:23

+1

getCountry()返回「」爲我 – styler1972 2017-10-19 19:25:19

0

獨立的格式原始電話號碼解決方案,如果你不知道你的國家,需要支持前棒棒糖。

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

爲什麼需要檢查一下LOLLIPOP? – 2018-02-27 15:01:12

+0

@androiddeveloper檢查此答案https://stackoverflow.com/questions/34521644/using-phonenumberutils-formatnumber-on-api-16 – whalemare 2018-02-28 01:52:47

+0

所以答案是,這是因爲這是它的方式... – 2018-02-28 08:58:55