This code demonstrates how to restrict user input in an EditText to only characters and whitespace using Kotlin in an Android application.
The code defines an InputFilter that checks each character entered into the EditText. If the character is a letter or a space, it is allowed. Otherwise, it is filtered out.
Here's a breakdown of the code:
MainActivity.kt
- This class defines the main activity of the application.
- In the
onCreatemethod, it retrieves a reference to the EditText widget from the layout usingfindViewById. - It then creates an
InputFilterinstance and assigns it to thefiltersproperty of the EditText. ThisInputFilteris responsible for checking the characters entered into the EditText.
InputFilter
- The
InputFilteris a class that is used to filter text input in Android. - The
filtermethod of theInputFilteris called whenever a character is entered into the EditText. - The
filtermethod takes six arguments:charSequence: The text that was entered.start: The starting index of the text that was entered.end: The ending index of the text that was entered.spanned: The current text in the EditText.source: The source of the text that was entered.flags: Flags associated with the event.
- In this case, the
filtermethod checks if the entered character is a space or a letter. If it is, it returns the character sequence. Otherwise, it returns an empty string, which effectively filters out the character.
- The
activity_main.xml
- This file defines the layout of the activity.
- It contains two EditText widgets. The first EditText can accept any type of text, while the second EditText is restricted to only characters and whitespace using the
android:digitsproperty. However, this approach is less flexible than using an InputFilter because it only allows you to specify a predefined set of characters.
In summary, this code provides a way to ensure that users can only enter characters and whitespace into a specific EditText widget in an Android application. This can be useful for situations where you want to collect data that only contains letters and spaces.
MainActivity.kt
package com.cfsuman.kotlintutorials
import android.app.Activity
import android.os.Bundle
import android.text.InputFilter
import android.widget.EditText
class MainActivity : Activity() {
private lateinit var editText2:EditText
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// get the widgets reference from XML layout
editText2 = findViewById(R.id.editText2)
// allow only characters/alphabets/letters with white space
// programmatically accepts both uppercase and lowercase letters
editText2.filters = arrayOf(filter)
}
}
// input filter to allow only characters and whitespace
val filter = InputFilter { charSequence, i, i2, spanned, i3, i4 ->
if (charSequence == "") { // for backspace
return@InputFilter charSequence
}
if (charSequence.toString().matches("[a-zA-Z ]+".toRegex())) {
charSequence
} else ""
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:background="#DCDCDC"
android:padding="32dp">
<!-- allow only characters and whitespace in xml -->
<EditText
android:id="@+id/editText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:padding="12dp"
android:textSize="30sp"
android:digits=
"abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ"
android:inputType="text|textVisiblePassword"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.12" />
<EditText
android:id="@+id/editText2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="12dp"
android:inputType="text|textVisiblePassword"
android:padding="12dp"
android:textSize="30sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText" />
</androidx.constraintlayout.widget.ConstraintLayout>
- android kotlin - EditText allow only numbers
- android kotlin - EditText allow only characters and numbers
- android kotlin - EditText numbers only programmatically
- android kotlin - EditText min length
- android kotlin - Change orientation without restarting activity
- android kotlin - Convert pixels to dp programmatically
- android kotlin - RecyclerView smooth scroll
- android kotlin - RecyclerView StaggeredGridLayoutManager example
- android kotlin - GridView OnItemClickListener
- android kotlin - RadioButton with image and text
- android kotlin - RadioButton onClick event
- android kotlin - TextView html formatted text