Android Kotlin: EditText enter key listener

Introduction: Listening for the Enter Key in an EditText (Android Kotlin)

This code demonstrates how to implement a listener for the Enter key press within an EditText component in an Android application written in Kotlin. Understanding user interaction with soft keyboards is crucial for building a seamless user experience. This example showcases a practical approach for detecting the Enter key press and performing specific actions in response.

Breakdown of the Code:

  1. Setting Up the Activity:

    • The MainActivity class inherits from AppCompatActivity.
    • In onCreate, the layout (activity_main.xml) is inflated.
  2. Implementing the Enter Key Listener:

    • An OnKeyListener is assigned to the editText.
    • The onKey method is called whenever a key is pressed on the soft keyboard.
    • Inside onKey:
      • It checks if the event is a key down event (ACTION_DOWN) and the pressed key is the Enter key (KEYCODE_ENTER).
      • If the conditions are met, specific actions are performed:
        • The text entered in the editText is displayed along with a message in the textView.
        • The soft keyboard is hidden using the hideSoftKeyboard extension function.
        • Focus is removed from the editText, and the cursor is hidden.
  3. Hiding the Soft Keyboard:

    • The hideSoftKeyboard extension function retrieves the InputMethodManager service and hides the soft keyboard from the currently focused window.

Summary:

This code snippet provides a clear approach for detecting the Enter key press in an EditText and offers a way to customize behavior based on this user interaction. It demonstrates best practices for managing focus and soft keyboard visibility in an Android application. The use of an extension function for hiding the soft keyboard promotes code reusability and maintainability.


MainActivity.kt

package com.example.jetpack

import android.app.Activity
import android.content.Context.INPUT_METHOD_SERVICE
import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import android.view.inputmethod.InputMethodManager
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // edit text enter key listener
        editText.setOnKeyListener(object : View.OnKeyListener {
            override fun onKey(v: View?, keyCode: Int, event: KeyEvent): Boolean {
                // if the event is a key down event on the enter button
                if (event.action == KeyEvent.ACTION_DOWN &&
                    keyCode == KeyEvent.KEYCODE_ENTER
                ) {
                    // perform action on key press
                    textView.text = "Pressed Enter Key\n\n${editText.text}"

                    // hide soft keyboard programmatically
                    hideSoftKeyboard()

                    // clear focus and hide cursor from edit text
                    editText.clearFocus()
                    editText.isCursorVisible = false

                    return true
                }
                return false
            }
        })
    }
}


// extension function to hide soft keyboard programmatically
fun Activity.hideSoftKeyboard(){
    (getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager).apply {
        hideSoftInputFromWindow(currentFocus?.windowToken, 0)
    }
}
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"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/constraintLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#EDEAE0"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:inputType="text"
        android:singleLine="true"
        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" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:fontFamily="sans-serif-condensed-medium"
        android:gravity="center"
        android:padding="8dp"
        android:textColor="#4F42B5"
        android:textSize="25sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText"
        tools:text="TextView" />

</androidx.constraintlayout.widget.ConstraintLayout>
More android kotlin tutorials