Step 1. Add the JitPack repository to your build file
Add it in your root settings.gradle at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
Add it in your settings.gradle.kts at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
Add to pom.xml
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Add it in your build.sbt at the end of resolvers:
resolvers += "jitpack" at "https://jitpack.io"
Add it in your project.clj at the end of repositories:
:repositories [["jitpack" "https://jitpack.io"]]
Step 2. Add the dependency
dependencies {
implementation 'com.github.genaku:input-mask-android:4.2.2'
}
dependencies {
implementation("com.github.genaku:input-mask-android:4.2.2")
}
<dependency>
<groupId>com.github.genaku</groupId>
<artifactId>input-mask-android</artifactId>
<version>4.2.2</version>
</dependency>
libraryDependencies += "com.github.genaku" % "input-mask-android" % "4.2.2"
:dependencies [[com.github.genaku/input-mask-android "4.2.2"]]
Input Mask
is an Android & iOS native library allowing to format user input on the fly.
The library provides you with a text field listener; when attached, it puts separators into the text while user types it in, and gets rid of unwanted symbols, all according to custom predefined pattern.
This allows to reformat whole strings pasted from the clipboard, e.g. turning pasted 8 800 123-45-67
into
8 (800) 123 45 67
.
Each pattern allows to extract valuable symbols from the entered text, returning you the immediate result with the text field listener's callback when the text changes. Such that, you'll be able to extract 1234567
from 8 (800) 123 45 67
or 19991234567
from 1 (999) 123 45 67
with two different patterns.
All separators and valuable symbol placeholders have their own syntax. We call such patterns "masks".
Mask examples:
+1 ([000]) [000] [00] [00]
([000]) [000]-[00]-[00]
[A][-----------------------------------------------------]
[A…]
[00]{.}[00]{.}[9900]
[AA]-[00000099]
[099]{.}[099]{.}[099]{.}[099]
[0000] [0000] [0000] [0000]
[00]{/}[00]
Check out our wiki for further reading.
Please also take a closer look at our Known issues section before you incorporate our library into your project.
For your bugreports and feature requests please file new issues as usually.
Should you have any questions, search for closed issues or open new ones at StackOverflow with the input-mask
tag.
We also have a community-driven cookbook of recipes, be sure to check it out, too.
<a name="installation" />Make sure you've added Kotlin support to your project.
repositories {
jcenter()
}
dependencies {
implementation 'com.redmadrobot:inputmask:4.0.0'
implementation 'org.jetbrains.kotlin:kotlin-stdlib:$latest_version'
}
<a name="knownissues" />
NoClassDefFoundError
java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/jvm/internal/Intrinsics;
Receiving this error might mean you haven't configured Kotlin for your Java only project. Consider explicitly adding the following to the list of your project dependencies:
implementation 'org.jetbrains.kotlin:kotlin-stdlib:$latest_version'
— where latest_version
is the current version of kotlin-stdlib
.
android:inputType
and IndexOutOfBoundsException
Be careful when specifying field's android:inputType
.
The library uses native Editable
variable received on afterTextChange
event in order to replace text efficiently. Because of that, field's inputType
is actually considered when the library is trying to mutate the text.
For instance, having a field with android:inputType="numeric"
, you cannot put spaces and dashes into the mentioned Editable
variable by default. Doing so will cause an out of range exception when the MaskedTextChangedListener
will try to reposition the cursor.
Still, you may use a workaround by putting the android:digits
value beside your android:inputType
; there, you should specify all the acceptable symbols:
<EditText
android:inputType="number"
android:digits="0123456789 -."
... />
— such that, you'll have the SDK satisfied.
Alternatively, if you are using a programmatic approach without XML files, you may consider configuring a KeyListener
like this:
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789 -.")); // modify character set for your case, e.g. add "+()"
(presumably fixed by PR50)
Symptoms:
[________]
, allowing user to write any kind of symbols;In this case text autocorrection & prediction might be a root cause of your problem, as it behaves somewhat weirdly in case when field listener tries to change the text during user input.
If so, consider disabling text suggestions by using corresponding input type:
<EditText
...
android:inputType="textNoSuggestions" />
Additionally be aware that some of the third-party keyboards ignore textNoSuggestions
setting; the recommendation is to use an extra workaround by setting the inputType
to textVisiblePassword
.
The list of projects that are using this library which were kind enough to share that information.
Feel free to add yours below.
These folks rock:
The library is distributed under the MIT LICENSE.