PhoneNumberKit
PhoneNumberKit copied to clipboard
Android Kotlin library to parse and format international phone numbers. Country code picker.
PhoneNumberKit
Android Kotlin library to parse and format international phone numbers. Based on Google's libphonenumber library.
Features
Features | |
---|---|
:phone: | Validate, normalize and extract the elements of any phone number string. |
:dart: | Convert raw phone number to formatted phone number string. |
:mag: | Automatically detects country flag of the phone number. |
:bookmark: | Country code selection bottom sheet. |
:pushpin: | Convert country codes to country names and vice versa. |
:tr: | Get country flag icon for given iso2 code. |
Usage
Create a phoneNumberKit instance and attach it to an editTextLayout. That's all you have to do.
val phoneNumberKit = PhoneNumberKit.Builder(this)
.setIconEnabled(true)
.admitCountries(listOf("tr", "ca", "de")) // List only those county formats
.excludeCountries(listOf("tr", "ca")) // Exclude those county formats
.build()
phoneNumberKit.attachToInput(textField, "tr")
// OR
phoneNumberKit.attachToInput(textField, 1)
To setup with country code selection bottom sheet
phoneNumberKit.setupCountryPicker(this) // Requires activity context
To get an example phone number for given iso2 code
val exampleNumber = phoneNumberKit.getExampleNumber("tr")
To parse raw text to phone number and receive country code, national number
val parsedNumber = phoneNumberKit.parsePhoneNumber(
number = "1266120000",
defaultRegion = "us"
)
parsedNumber?.nationalNumber
parsedNumber?.countryCode
parsedNumber?.numberOfLeadingZeros
To convert raw text to formatted phone number string
val formattedNumber = phoneNumberKit.formatPhoneNumber(
number = "1266120000",
defaultRegion = "us"
)
To receive a country flag icon for given iso2 code
val flag = phoneNumberKit.getFlagIcon("ca")
Usage with Custom Item Layout
Add your custom item layout resource as a parameter
phoneNumberKit.setupCountryPicker(this, R.layout.my_item_layout, searchEnabled = true)
You need to use below view ids in your layout file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingVertical="12dp"
android:paddingHorizontal="18dp"
android:clickable="true"
android:focusable="true"
android:background="?android:attr/selectableItemBackground">
<ImageView
android:id="@+id/imageViewFlag"
android:layout_width="22dp"
android:layout_height="22dp" />
<TextView
android:id="@+id/textViewName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:singleLine="true"
android:maxLines="1"
android:ellipsize="end"
android:textSize="16sp"
android:textColor="#232425" />
<TextView
android:id="@+id/textViewCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textColor="#838383" />
</LinearLayout>
Demo
Country Code Picker | Format Example | Format Example |
---|---|---|
![]() |
![]() |
![]() |
Installation
Follow me on Twitter @ibrahimsn98
Step 1. Add the JitPack repository to your build file
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
implementation 'com.github.ibrahimsn98:PhoneNumberKit:2.0.6'
}
Checklist
- [x] Search for country codes
- [x] Custom list item layout support
- [x] Better performance with coroutines
- [ ] Phone number validation indicator
- [x] Dark theme
- [ ] Tests
Conception
- This library is based on Google's lilPhoneNumber library (https://github.com/google/libphonenumber)
- Inspired from PhoneNumberKit Swift library by marmelloy (https://github.com/marmelroy/PhoneNumberKit)
- Flag images from region-flags
License
PhoneNumberKit is available under the Apache license. See the LICENSE file for more info.