RxValidationTextInputLayout
Introduction: The easiest way to bring validation to your project
Tags:
The easiest way to bring validation to EditText with TextInputLayout.
Getting Started
Add dependency to your project using JitPack
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.KucherenkoIhor:RxValidationTextInputLayout:0.2.2'
}
Using in XML:
<com.kucherenko.RxValidationTextInputLayout
android:id="@+id/tilFirstName"
style="@style/TextInputLayout.Counter"
android:layout_marginTop="@dimen/margin_l"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="parent"
app:help="at least 3 letters"
app:error="@string/invalid_first_name"
app:errorTextAppearance="@style/TextAppearance.AppCompat.Small.Error"
app:helperTextAppearance="@style/TextAppearance.AppCompat.Small.Helper"
app:regex="@string/regex_name">
<android.support.design.widget.TextInputEditText
android:id="@+id/etFirstName"
style="@style/EditText.SingleLine"
android:hint="@string/hint_first_name"
android:imeOptions="actionNext"
android:inputType="textPersonName" />
</com.kucherenko.RxValidationTextInputLayout>
And get simple boolean result using RxJava2 in Java code:
tilFirstName.onReady = { observable ->
disposable = observable.subscribe { isValid ->
btnSignIn.isEnabled = isValid
}
}
Features
- Reactive approach using RxJava2:
tilFirstName.onReady = { observable -> disposable = observable.subscribe { isValid -> btnSignIn.isEnabled = isValid } }
Or if you want to observe several fields:
``` val textInputLayouts = arrayOf(tilFirstName, tilLastName, tilEmail, tilPhone, tilYear, tilDob, tilPassword, tilConfirmPassword) RxValidationTextInputLayout.combineOnReady(*textInputLayouts) { observable -> disposable = observable .debounce { Observable.timer(if (it) 500L else 0L, TimeUnit.MILLISECONDS) } .subscribe { btnSignIn.isEnabled = it } }
* Simple regex support: ``app:regex="@string/regex_name"``
* You can change configuration as you need:
* You can allow empty state of input field: `` app:allowEmpty="true"``
* Or disable error showing when filed is empty `` app:showErrorIfEmpty="true"``
* Compare input with another one `` app:equalEditText="@id/etPassword"``.
It's useful for password and confirm password fields:
<p align="center">
<img src="https://image.ibb.co/dS6ra6/confirm.png" width="350"/>
</p>
* Helper text according to [Material Design Guidelines](https://material.io/guidelines/components/text-fields.html#text-fields-layout)
``app:help="Must be the same with password"``
<p align="center">
<img src="https://image.ibb.co/jL39TR/helper.png" width="350"/>
</p>
* Error text appears if input text lose focus: ``app:error="@string/invalid_password"``
<p align="center">
<img src="https://image.ibb.co/fkzSF6/error.png" width="350"/>
</p>
* Custom text styles for help and error states:
app:errorTextAppearance="@style/TextAppearance.AppCompat.Small.Error"
app:helperTextAppearance="@style/TextAppearance.AppCompat.Small.Helper"
```
Changelog
Version: 0.2.1
- Improved equal edit text functionality
Version: 0.1.3
- Fixed onReady issues
Version: 0.1.2
- Added the methods to trigger error text immediately