PhoneNumberKit
Android Kotlin library to parse and format international phone numbers. Based on Google's libphonenumber library.
Features
Features | |
---|---|
βοΈ | Validate, normalize and extract the elements of any phone number string. |
π― | Convert raw phone number to formatted phone number string. |
Automatically detects country flag of the phone number. | |
Country code selection bottom sheet. | |
Convert country codes to country names and vice versa. | |
πΉπ· | 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
- Search for country codes
- Custom list item layout support
- Better performance with coroutines
- Phone number validation indicator
- 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.