android kotlin - Disable soft keyboard on NumberPicker

Disabling Soft Keyboard on NumberPicker in Android with Kotlin

This code demonstrates how to programmatically prevent the soft keyboard from appearing when a user interacts with a specific NumberPicker in an Android application written in Kotlin.

The code defines a MainActivity class that extends the Activity class. Inside onCreate(), it inflates the layout file activity_main.xml and retrieves references to two NumberPicker widgets using findViewById.

NumberPicker 1 - Setting Numeric Values:

The first NumberPicker is configured with numeric values. It sets the minimum value to 0 and the maximum value to 20.

NumberPicker 2 - Setting String Values and Disabling Soft Keyboard:

The second NumberPicker showcases a more complex setup. An array named colors is created containing string values representing colors. The NumberPicker's minimum and maximum values are set based on the array size. Finally, the displayedValues property is assigned the colors array to display these string values on the picker.

Crucially, the line numberPicker2.descendantFocusability = NumberPicker.FOCUS_BLOCK_DESCENDANTS disables the soft keyboard for this specific NumberPicker. This leverages the descendantFocusability property of NumberPicker and sets it to a constant value FOCUS_BLOCK_DESCENDANTS. This instructs the system to prevent any of the NumberPicker's descendants (including the edit text used for manual input) from receiving focus, effectively stopping the soft keyboard from appearing when the user interacts with this NumberPicker.

The provided activity_main.xml file defines the layout for the activity. It includes two NumberPicker widgets with appropriate constraints within a ConstraintLayout. Interestingly, it also includes a commented-out line setting android:descendantFocusability="blocksDescendants" on the first NumberPicker in the XML itself. This approach achieves the same outcome as the code in onCreate but demonstrates an alternative way to disable the soft keyboard through layout attributes.

Summary

This code snippet provides two methods for disabling the soft keyboard on a NumberPicker in Android with Kotlin. The first approach uses code within the activity's onCreate method, while the second leverages an XML attribute. Both methods achieve the same goal of preventing the soft keyboard from appearing when the user interacts with the specified NumberPicker.


MainActivity.kt

package com.cfsuman.kotlintutorials

import android.app.Activity
import android.os.Bundle
import android.widget.NumberPicker


class MainActivity : Activity() {
    private lateinit var numberPicker:NumberPicker
    private lateinit var numberPicker2:NumberPicker

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

        // get the widgets reference from XML layout
        numberPicker = findViewById(R.id.numberPicker)
        numberPicker2 = findViewById(R.id.numberPicker2)

        // set first number picker minimum and maximum value
        numberPicker.minValue = 0
        numberPicker.maxValue = 20


        // display string values to the number picker
        // at first, initialize a new array instance with string values
        val colors = arrayOf("Red", "Green", "Blue", "Yellow",
            "Magenta", "Black", "Pink")

        // set the number picker minimum and maximum values
        numberPicker2.minValue = 0
        numberPicker2.maxValue = colors.size - 1

        // set the valued to be displayed in number picker
        numberPicker2.displayedValues = colors

        // disable soft keyboard programmatically
        numberPicker2.descendantFocusability =
            NumberPicker.FOCUS_BLOCK_DESCENDANTS
    }
}
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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#DCDCDC"
    android:padding="32dp">

    <!--
        disable soft keyboard in xml
        android:descendantFocusability="blocksDescendants"
    -->
    <NumberPicker
        android:id="@+id/numberPicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:descendantFocusability="blocksDescendants"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <NumberPicker
        android:id="@+id/numberPicker2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/numberPicker" />

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