Wie kann ich eine Telefonnummer formatieren? PhoneNumberUtils?
Z.B: 1234567890
→ (123) 456-7890
Bytecode
Wie kann ich eine Telefonnummer formatieren? PhoneNumberUtils?
Z.B: 1234567890
→ (123) 456-7890
Sven Wikinger
In seiner einfachsten Form:
String formattedNumber = PhoneNumberUtils.formatNumber(unformattedNumber);
Dadurch wird die Nummer automatisch gemäß den Regeln für das Land formatiert, aus dem die Nummer stammt.
Sie können bearbeitbaren Text auch direkt formatieren, indem Sie Folgendes verwenden:
PhoneNumberUtils.formatNumber(Editable text, int defaultFormattingType);
Schauen Sie sich an PhoneNumberUtils
für weitere Optionen.
statt 1234567890 → (123) 456-7890 erhalte ich:
– Brillant Pappin
29. Januar 2013 um 16:46 Uhr
Obwohl die Antwort richtig ist, denke ich, dass die eigentlich richtige Antwort auf diese Frage ist, dass die Formatierung NICHT anpassbar genug ist, es sei denn, Sie möchten Ihre eigene Implementierung schreiben. 🙁 STPhoneFormatter in CocoaPods für die iOS-Entwicklung ist eine ziemlich raffinierte Bibliothek, um dies dort drüben zu handhaben. Keine solche Freude für Android. :-/
– Norman H
18. Dezember 2013 um 21:59 Uhr
@Sven Viking Ich möchte formatierte Zahlen in unformatierte Zahlen konvertieren wie .. 555-4 to 5554
irgendeine Lösungsmöglichkeit..?
– Gorgeous_DroidVirus
5. April 2014 um 7:41 Uhr
PhoneNumberUtils.formatNumber(String-Quelle) ist in Lollipop veraltet, man muss es verwenden PhoneNumberUtils.formatNumber (String phoneNumber, String defaultCountryIso)
– Schneesturm
3. Februar 2015 um 15:56 Uhr
PhoneNumberUtils.formatNumber(Editable text, int defaultFormattingType);
Was ist defaultFormattingType
hier ?
– Azim Ansari
23. Juli 2015 um 7:04 Uhr
Ich habe mich für die Version von Google entschieden (https://github.com/googlei18n/libphonenumber), weil dann das min SDK niedriger sein kann (ich denke, es ist nicht im Android SDK bis 21).
Die Verwendung ist in etwa so:
PhoneNumberUtil pnu = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber pn = pnu.parse("1234567890", "US");
String pnE164 = pnu.format(pn, PhoneNumberUtil.PhoneNumberFormat.E164);
In Android Studio muss man dies zu den Abhängigkeiten in build.gradle hinzufügen:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
...
compile 'com.googlecode.libphonenumber:libphonenumber:7.2.2'
}
formatNumber ist bei LOLLIPOP veraltet, danach müssen Sie das Gebietsschema als zusätzliches Argument hinzufügen.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return PhoneNumberUtils.formatNumber(yourStringPhone,Locale.getDefault().getCountry());
} else {
//Deprecated method
return PhoneNumberUtils.formatNumber(yourStringPhone);
}
Ich habe dies versucht, aber die Telefonnummer wird auf dem Mobilgerät nicht formatiert. Da sie auf dem Tablet ordnungsgemäß funktioniert, zeigt das Tablet eine formatierte Nummer an.
– Musik
21. Juni 2017 um 9:12 Uhr
Ich bin in Indien und Locale.getDefault().getCountry() gibt mir “US”. Ok, das ist kein Problem, aber die Nummer wird nicht formatiert. Es gibt die 10/11-stellige Zahl unverändert zurück. Und mit der veralteten Methode wird formatiert zurückgegeben.
– pratik03
24. Juli 2017 um 7:19 Uhr
getCountry() gibt “” für mich zurück
– Tyler
19. Oktober 2017 um 19:25 Uhr
Arbeitete in den USA für mich.
– MAF
11. November 2020 um 21:38 Uhr
Norman H
Es sieht aus wie diese Bibliothek von Google könnte eine bessere Lösung für benutzerdefinierte Formatierungen in Android sein.
API-Dokumente:
https://github.com/googlei18n/libphonenumber/blob/master/README.md
2020- November
Folgendes hat für mich für alle Versionen des Betriebssystems funktioniert:
PhoneNumberUtils.formatNumber(yourStringPhone,Locale.getDefault().getCountry());
Walstute
Eigenständige Lösung zum Formatieren von Rohtelefonnummern, wenn Sie Ihr Land nicht kennen und Unterstützung für Pre-Lollipop benötigen.
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)
}
}
Sam Chen
2020 Arbeitslösung:
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String countryIso = telephonyManager.getNetworkCountryIso().toUpperCase(); //important!!
phoneNumberTextView.setText(PhoneNumberUtils.formatNumber("3473214567", countryIso));
Überprüfen Sie diese Antwort auf stackoverflow.com/a/55416434/7041761
– Max Sonov
29. März 2019 um 13:09 Uhr