User input masking library repo.

Overview

Input Mask

Awesome Android Arsenal Bintray codebeat badge license

PlatformAndroidiOSmacOS

Direct input

More GIFs [~3 MB] Direct input Direct input Direct input
Direct input Direct input

Migration Guide: v.6

This update brings breaking changes. Namely, the autocomplete flag is now a part of the CaretGravity enum, thus the Mask::apply call is now single-argument, as all the necessary information is included into the CaretString structure.

v.6 introduces the «autoskip» feature, which allows the cursor to jump over formatting blocks of symbols in the middle of the text as if they were a single char when hitting Backspace, and this feature also allows to trim formatting characters on backspacing at the end of the line.

Make sure to take a look at our CHANGELOG.

Description

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. International phone numbers: +1 ([000]) [000] [00] [00]
  2. Local phone numbers: ([000]) [000]-[00]-[00]
  3. Names: [A][-----------------------------------------------------]
  4. Text: [A…]
  5. Dates: [00]{.}[00]{.}[9900]
  6. Serial numbers: [AA]-[00000099]
  7. IPv4: [099]{.}[099]{.}[099]{.}[099]
  8. Visa card numbers: [0000] [0000] [0000] [0000]
  9. MM/YY: [00]{/}[00]
  10. UK IBAN: GB[00] [____] [0000] [0000] [0000] [00]

Questions & Issues

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.

Installation

Gradle

Make sure you've added Kotlin support to your project.

repositories {
    jcenter()
}

dependencies {
    implementation 'com.redmadrobot:input-mask-android:6.0.0'
    
    implementation 'org.jetbrains.kotlin:kotlin-stdlib:$latest_version'
}

Known issues

InputMask vs. 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.

InputMask vs. 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 "+()"

InputMask vs. autocorrection & prediction

(presumably fixed by PR50)

Symptoms:

  • You've got a wildcard template like [________], allowing user to write any kind of symbols;
  • Cursor jumps to the beginning of the line or to some random position while user input.

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.

InputMask vs. android:textAllCaps

Kudos to Weiyi Li for reporting this issue

Please be advised that android:textAllCaps is not meant to work with EditText instances:

This setting will be ignored if this field is editable or selectable.

Enabling this setting on editable and/or selectable fields leads to weird and unpredictable behaviour and sometimes even crashes. Instead, consider using android:inputType="textCapCharacters" or workaround by adding an InputFilter:

final InputFilter[] filters = { new InputFilter.AllCaps() };
editText.setFilters(filters);

Bare in mind, you might have to befriend this solution with your existing android:digits property in case your text field accepts both digits and letters.

References

The list of projects that are using this library which were kind enough to share that information.

Feel free to add yours below.

Special thanks

These folks rock:

License

The library is distributed under the MIT LICENSE.

Comments
  • Migrate to Maven Central

    Migrate to Maven Central

    JFrog just announced that they'll be shutting down JCenter: https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/

    Key dates are:

    • February 28th: No more submissions will be accepted to Bintray, JCenter
    • May 1st: Bintray, JCenter services will no longer be available

    Hence, input-mask-android should also be migrated to another maven repository like Maven central.

    urgent 
    opened by GuilhE 17
  • bug  java.lang.IndexOutOfBoundsException:

    bug java.lang.IndexOutOfBoundsException:

    java.lang.IndexOutOfBoundsException: setSpan (11 ... 11) ends beyond length 10 at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1265) at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:684) at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:677) at android.text.Selection.setSelection(Selection.java:76) at android.widget.TextView.semSetSelection(TextView.java:11571) at android.widget.TextView.semSetSelection(TextView.java:11585) at android.widget.EditText.setSelection(EditText.java:125) at com.redmadrobot.inputmask.MaskedTextChangedListener.afterTextChanged(MaskedTextChangedListener.kt:113) at android.widget.TextView.sendAfterTextChanged(TextView.java:9508) at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:12460) at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1218) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:579) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:509) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:508) at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:850) at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:200) at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:183) at android.view.inputmethod.InputConnectionWrapper.commitText(InputConnectionWrapper.java:158) at com.android.tools.profiler.support.event.InputConnectionWrapper.commitText(InputConnectionWrapper.java:43) at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:345) at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:91) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

    bug circumstances clarification 
    opened by Anton22255 9
  • maskFilled wrong value for subsequent optional blocks

    maskFilled wrong value for subsequent optional blocks

    Library version: 4.0.0 Issue: Hello, I've faced the issue of wrong 'maskFilled' argument value when subsequent blocks with optional digits had been installed.

    Consider the following example:

    MaskedTextChangedListener.installOn(
        testEditText,
        "[0000] [9999] [999]",
        object : MaskedTextChangedListener.ValueListener{
            override fun onTextChanged(maskFilled: Boolean, extractedValue: String) {
                Log.d("TEXT_CHANGED", "extractedValue=[$extractedValue], maskFilled=[$maskFilled]")
            }
        }
    )
    

    The actual output as follows:

    D/TEXT_CHANGED: extractedValue=[111], maskFilled=[false]  
    D/TEXT_CHANGED: extractedValue=[1111], maskFilled=[false] 
    D/TEXT_CHANGED: extractedValue=[11111], maskFilled=[false]
    D/TEXT_CHANGED: extractedValue=[111111], maskFilled=[false]
    D/TEXT_CHANGED: extractedValue=[1111111], maskFilled=[false]
    D/TEXT_CHANGED: extractedValue=[11111111], maskFilled=[true]
    D/TEXT_CHANGED: extractedValue=[111111111], maskFilled=[true]
    

    But the expected output should be:

    D/TEXT_CHANGED: extractedValue=[111], maskFilled=[false]  
    D/TEXT_CHANGED: extractedValue=[1111], maskFilled=[true] 
    D/TEXT_CHANGED: extractedValue=[11111], maskFilled=[true]
    D/TEXT_CHANGED: extractedValue=[111111], maskFilled=[true]
    D/TEXT_CHANGED: extractedValue=[1111111], maskFilled=[true]
    D/TEXT_CHANGED: extractedValue=[11111111], maskFilled=[true]
    D/TEXT_CHANGED: extractedValue=[111111111], maskFilled=[true]
    

    Thanks in advance.

    bug 
    opened by peanutwolf 7
  • optional number ignored

    optional number ignored

    Hi! I'm trying to validate a Chilean rut,

    so I have a mask like this [90].[000].[000]{-}[_] in a ReversedMaskTextChangedListener, the problem is that the last digit is ignored so if i write nine digits the last one is deleted then for example if i add 123456789 I get 2.345.678-9 result.

    it does not happen if i add a second number required, leaving the mask like this: [900].[000].[000]{-}[_] in this case, if I add 1234567890, I get 123.456.789-0

    question circumstances clarification 
    opened by jesualex 7
  • affineFormats конфликтуют.

    affineFormats конфликтуют.

    Использую affineFormats для ввода серийных номеров. Есть основной формат "[A] [000] [AA] [00]". Есть дополнительный affineFormats "[A][0000] [00]".

    Без лишних манипуляций дополнительный ввести просто невозможно. Перепробовал все сочетания affinityCalculationStrategy, но ни один не позволил решить задачу.

    Пользователю приходится добавлять и убирать пробел, являющийся вторым символом в этой строке, и только в таком случае он может переключаться между форматами.

    Вопрос: возможно ли сделать такое автоматическое переключение между масками силами данной либы?

    circumstances clarification 
    opened by RandGor 6
  • [Question] - When deleting a space, make auto trim()

    [Question] - When deleting a space, make auto trim()

    Prerequisites

    • [X] Put an X between the brackets on this line if you have done all of the following:
      • read our Wiki;
      • read the entire Known issues section;
      • checked that my feature request isn't already filled;
      • searched StackOverflow's input-mask tag for similar problems.

    Summary

    When deleting text auto trim() (this can be optional)

    Motivation

    Achieve the same functionality when typing.

    Describe the solution you'd like

    If our mask is [000] [000], when we type the fourth char this lib will automatically put a space and insert the 4th char after it. When deleting this behaviour could be similar, for instance, when deleting the 4th char it could also delete the space.

    Describe alternatives you've considered

    private const val PHONE_MASK = "[000] [000] [000]"
    android:digits="0123456789 "
    android:inputType="number|phone"
    
    • I've tried to manually achieve this (with another listener) but it will fail with java.lang.IndexOutOfBoundsException: setSpan (N … N) ends beyond length ...
    • Tried to remove the space char from digits and listener.autocomplete = true but it also fails with java.lang.IndexOutOfBoundsException: setSpan (4 ... 4) ends beyond length 3
    enhancement 
    opened by GuilhE 6
  • Combine digit mask and letter input

    Combine digit mask and letter input

    How can I combine mask for phone number and input letter, for example: mask: +7 ([000]) [000]-[00]-[00] input: 7 -> +7 +79 -> +7 (9 +7 (9h -> 79h

    question 
    opened by elvisfromsouth 6
  • Affinity masks with a default (For a credit card)

    Affinity masks with a default (For a credit card)

    Hi guys! Such a brilliant library you have!

    I have a small question. Here is a piece of code:

    MaskedTextChangedListener.installOn(
                binding.paymentCardNumberLayout.editText!!,
                "[0000] [0000] [0000] [0000] [999]",
                affineFormats = listOf(
                    "3[000] [000000] [00009]",              // American Express, Diners Club (14-15)
                    "4[000] [0000] [0000] [0000] [999]",    // Visa (16-19)
                    "5[000] [0000] [0000] [0000] [999]",    // Master Card (16-19)
                    "6[000] [0000] [0000] [0000]"           // Discover (16)
                ),
                affinityCalculationStrategy = AffinityCalculationStrategy.PREFIX)
    

    I want my user to start typing his card number and if it starts with one of the affinity prefixes so use it to format. But in this example the default mask is always used.

    If I change the default mask to "4[000] [0000] [0000] [0000] [999]" for example it works like a charm. But there is always "4" in the edittext on the first display of the form.

    question 
    opened by Zeliret 6
  • IndexOutOfBoundsException: setSpan (17 ... 17) ends beyond length 2

    IndexOutOfBoundsException: setSpan (17 ... 17) ends beyond length 2

    Describe the bug

    I use MaskedTextChangedListener to format the phone number, the mask is +7 ([000]) [000] - [00] - [00]. With normal manual text input, everything works fine, but if you use the setTex method, the listener throws an exception

    java.lang.IndexOutOfBoundsException: setSpan (17 ... 17) ends beyond length 2 at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1325) at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:684) at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:676) at android.text.Selection.setSelection(Selection.java:94) at android.text.Selection.setSelection(Selection.java:78) at android.text.Selection.setSelection(Selection.java:153) at android.widget.EditText.setSelection(EditText.java:136) at com.redmadrobot.inputmask.MaskedTextChangedListener.afterTextChanged(MaskedTextChangedListener.kt:193) at android.widget.TextView.sendAfterTextChanged(TextView.java:10551) at android.widget.TextView.setText(TextView.java:6278) at android.widget.TextView.setText(TextView.java:6097) at android.widget.EditText.setText(EditText.java:122)

    • Library version: 6.0.0
    opened by SteelOscar 5
  • ERROR: Failed to resolve: com.redmadrobot:input-mask-android:4.2.0

    ERROR: Failed to resolve: com.redmadrobot:input-mask-android:4.2.0

    I have added the line implementation 'com.redmadrobot:input-mask-android:4.2.0' to the 'app' module of my project, according to the latest docs.

    What I get is: "ERROR: Failed to resolve: com.redmadrobot:input-mask-android:4.2.0 Show in Project Structure dialog Affected Modules: app"

    Is it really available in jcenter now?

    bug 
    opened by haart28 5
  • Поддержка RTL

    Поддержка RTL

    Здравствуйте! При реализации в приложении персидской локализации (Right To Left) возникла проблема с отображением маски в EditText. Маска отзеркалилась, но не верно:

    в обычном макете (Left To Right) маска +7 ([000]) [000]-[00]-[00] при заполнении ведёт себя так: +7 (123) 456-78-90. (слева направо, как и ожидается) в макете Right To Left так: 456-78-90 (123) 7+, то есть сама строка заполняется справа налево, но внутри блоков - слева направо.

    другой пример, маска карты - [0000] [0000] [0000] [0000] LTR - 1234 5678 9099 9999 RTL - 9999 9099 5678 1234

    Пытался отключить RTL для поля, добавив android:layoutDirection="ltr" - но это не дало результатов, поле по прежнему заполняется справа налево и в неправильном порядке.

    Подскажите, пожалуйста, как сделать так, что бы при работе приложения в RTL режиме, поля с масками продолжали работать в LTR режиме ?

    P.S.: Спасибо большое за вашу работу, библиотека отличная!

    bug circumstances clarification 
    opened by epifanov-konstantin 5
  • Could not resolve com.redmadrobot:inputmask:4.1.0

    Could not resolve com.redmadrobot:inputmask:4.1.0

    Could not resolve com.redmadrobot:inputmask:4.1.0. Required by: project :app > project :azsgomodule > Could not resolve com.redmadrobot:inputmask:4.1.0. > Could not get resource 'https://jitpack.io/com/redmadrobot/inputmask/4.1.0/inputmask-4.1.0.pom'. > Could not GET 'https://jitpack.io/com/redmadrobot/inputmask/4.1.0/inputmask-4.1.0.pom'. Received status code 401 from server: Unauthorized

    opened by stereodenis 1
  • Possibility to enter any character

    Possibility to enter any character

    We have an input which waits credit card number. User could enter numbers by himself, like 1234 1234 1234 1234 But he also may choose already entered cards from the favorite list. When user click one of them, the number of chosen card will be set to the input. So, the problem is the number of credit card from the favorite list is masked like 1234 12** **** **34 We know that for the first case we should use this mask: [0000] [0000] [0000] [0000] For the second case we thought this could be used: [0000] [00__] [____] [__00]. But it set 1234 12** **** **34 to the input like 1234 12 i.e it takes only first 6 part. The question is how to validate two possible cases with one mask?

    opened by ttojiyev 0
  • Switching keyboards in mask

    Switching keyboards in mask

    Describe the bug

    Hello, I have a problem with switching keyboard during typing. When I switch input type from InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS to InputType.TYPE_CLASS_NUMBER I am getting an error IndexOutOfBoundsException. I read the knowing issues https://github.com/RedMadRobot/input-mask-android#knownissues and try to specify android:digit but it does not help. Is there any other solution please ?

    Expected behaviour Switch keyboard from text to numeric without clearing edit text (IndexOutOfBoundsException)

    Platform information

    • OS version: [e.g. Android 10]
    • Library version: [e.g. 6.1]

    Code:

       fun formatter(inputLayout: TextInputLayout) {
            with(inputLayout.editText!!) {
                val listener = MaskedTextChangedListener("[AA] [00]", this, object : MaskedTextChangedListener.ValueListener {
                    override fun onTextChanged(maskFilled: Boolean, extractedValue: String, formattedValue: String) {
                        inputType = if (formattedValue.length >= 2) {
                            InputType.TYPE_CLASS_NUMBER
                        } else {
                            InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
                        }
                    }
                })
                addTextChangedListener(listener)
                onFocusChangeListener = listener
            }
        }
    
               <com.google.android.material.textfield.TextInputLayout
                    android:id="@+id/textInputLayout"
                    style="@style/TextInputLayoutStyle"
                    android:hint="hint"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent">
    
                    <com.google.android.material.textfield.TextInputEditText
                        android:id="@+id/textInputEditText"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
                        android:singleLine="true" />
                </com.google.android.material.textfield.TextInputLayout>
    

    formatter(textInputLayout)

    opened by anonyimek 0
  • Странный конфликт с двумя масками

    Странный конфликт с двумя масками

    Describe the bug

    В общем и целом есть две маски, одна на 10 символов, вторая больше. "[0] [000] [000] [000]" "[00] [000] [000] [000] [000] [000]"

    Есть необходимость, чтобы когда пользователь ввел менее 10 символов - форматировалось по первой маске более 10 символов - переключалась маска и форматировалось по второй при стирании 11 символа - снова по первой.

    Как только не пробовал, какие стратегии не выбирал(перепробовал все), autoskip autocomplete - ноль эмоций

     listener = MaskedTextChangedListener.installOn(
            editText = key,
            primaryFormat = "[0] [000] [000] [000]",
            affineFormats = listOf("[00] [000] [000] [000] [000] [000]"),
            affinityCalculationStrategy = AffinityCalculationStrategy.EXTRACTED_VALUE_CAPACITY,
            valueListener = object : MaskedTextChangedListener.ValueListener {
                override fun onTextChanged(
                    maskFilled: Boolean,
                    extractedValue: String,
                    formattedText: String
                ) {
                  
                }
            }
        )
    

    Как правильно это реализовать?

    opened by KORuL 1
  • Wrong truncation when pasting phone number

    Wrong truncation when pasting phone number

    I have a phone number mask like this: +555 [00] [000] [00] [00]

    User wants to paste the number in full national format, for example "+555123456789" The expected input after paste would be: +555 12 345 67 89 But the actual input is: +555 55 512 34 56

    So in case of phone numbers, the library should probably truncate the prefix and fill in the 9 last digits of clipboard text.

    circumstances clarification 
    opened by DarkMinstrel 1
Releases(6.0.0)
  • 6.0.0(Mar 16, 2020)

    Removed:

    • Mask::apply(), the autocomplete flag

    This flag is now a part of the CaretGravity.FORWARD.

    Modified:

    • CaretGravity is now a sealed class

    Added:

    • CaretGravity.FORWARD, the autocomplete flag
    • CaretGravity.BACKWARD, the autoskip flag
    Source code(tar.gz)
    Source code(zip)
Owner
red_mad_robot
knows its onions in mobile application development
red_mad_robot
User input masking library repo.

More GIFs [~3 MB] Migration Guide: v.6 This update brings breaking changes. Namely, the autocomplete flag is now a part of the CaretGravity enum, thus

red_mad_robot 1.2k Dec 20, 2022
Add text masking functionality to Android EditText. It will prevent user from inserting not allowed signs, and format input as well.

MaskFormatter MaskFormatter adds mask functionality to your EditText. It will prevent user from inserting not allowed signs, and format input as well.

Azimo Labs 161 Nov 25, 2022
Android library contain custom realisation of EditText component for masking and formatting input text

Masked-Edittext Masked-Edittext android library EditText widget wrapper add masking and formatting input text functionality. Install Maven <dependency

Evgeny Safronov 600 Nov 29, 2022
A simple library for validating user input in forms using annotations.

ValidationKomensky for Android A simple library for validating user input in forms using annotations. Features: Validate all views at once and show fe

Inmite s.r.o. 512 Nov 20, 2022
🗣 An overlay that gets your user’s voice permission and input as text in a customizable UI

Overview Voice overlay helps you turn your user's voice into text, providing a polished UX while handling for you the necessary permission. Demo You c

Algolia 228 Nov 25, 2022
🗣 An overlay that gets your user’s voice permission and input as text in a customizable UI

Overview Voice overlay helps you turn your user's voice into text, providing a polished UX while handling for you the necessary permission. Demo You c

Algolia 228 Nov 25, 2022
My Maps displays a list of maps, each of which show user-defined markers with a title, description, and location. The user can also create a new map. The user can save maps and load them in from previous usages of the app.

My Maps Bryant Jimenez My Maps displays a list of maps, each of which show user-defined markers with a title, description, and location. The user can

null 0 Nov 1, 2021
A new canvas drawing library for Android. Aims to be the Fabric.js for Android. Supports text, images, and hand/stylus drawing input. The library has a website and API docs, check it out

FabricView - A new canvas drawing library for Android. The library was born as part of a project in SD Hacks (www.sdhacks.io) on October 3rd. It is cu

Antwan Gaggi 1k Dec 13, 2022
A library that extends the existing JDBC API so that data objects can be used as input (to set parameters) and output (from ResultSet's rows).

SqlObjectMapper This is a library that extends the existing JDBC API so that data objects can be used as input (to set parameters) and output (from Re

Qualified Cactus 2 Nov 7, 2022
Awesome Android Typeahead library - User mention plugin, UI widget for auto complete user mention using the at sign (@) like Twitter or Facebook.

android-typeahead Awesome Android Typeahead library - User mention plugin, UI widget for auto complete user mention using the at sign (@) like Twitter

Arab Agile 11 Jun 4, 2019
A TextView library that allows the user to increase/decrease font size with a two finger gesture by the user.

PinchZoomTextView Library This library allows you to have a TextView that will grow/shrink the font size using gestures from the user. Usage To have a

null 311 Nov 23, 2022
A material style input for codes

Material Code input A material style input for put codes Based on Code input field concept by SAMUEL KANTALA How to use Minimal SDK Version 11 Usage w

Adrián Lomas 962 Nov 26, 2022
Simple Visualizer from mic input for Android.

Voice Recording Visualizer Simple Visualizer from mic input for Android. Usage @Override protected void onCreate(Bundle savedInstanceState) {

Takayuki Yorikane 542 Nov 24, 2022
Takes the input from the Android MediaPlayer and displays visualizations, like in iTunes or WinAmp

Android Visualizer A View subclass that Takes the input from the Android MediaPlayer and displays visualizations, like in iTunes or WinAmp The Visuali

null 798 Dec 22, 2022
A material style input for codes

Material Code input A material style input for put codes Based on Code input field concept by SAMUEL KANTALA How to use Minimal SDK Version 11 Usage w

Adrián Lomas 962 Nov 26, 2022
Floating label input widgets

Android Floating Label Widgets A set of input widgets with a hint label that floats when input is not empty. Demo A demo of the widget is worth a thou

MarvinLabs 450 Nov 25, 2022
High level parsing to ensure your input is in the right shape and satisfies all constraints that business logic requires.

Parsix High level parsing to ensure your input is in the right shape and satisfies all constraints that business logic requires. It is highly inspired

null 190 Oct 16, 2022
Native solution for common React Native problem of focused views being covered by soft input view.

react-native-avoid-softinput Native solution for common React Native problem of focused views being covered by soft input view. It is solved by listen

Mateusz Mędrek 312 Jan 2, 2023
A template for Advent of Code challenge with input downloading and prepared test classes

Advent of Code Kotlin Template A template which will help you concentrate on the puzzle solutions. It brings Downloading and caching of the puzzle inp

Henning B 2 Dec 1, 2021
A Tip Calculator app written in Kotlin that takes Total cost as an input and calculate tip according to the feedbacks.

Create a Tip Calculator App Code for the Android Basics in Kotlin: Create a Tip Calculator app codelab. In this codelab, you will be writing code for

Hemant Sachdeva 1 Dec 4, 2021