How to make TextField Number only in Android Jetpack Compose

By Mohammed Rashid •  November 17th, 2022 • 

TextField is the field where the user types in. Sometimes developers want to show a specific type of keyboard to enter data. This Jetpack Compose tutorial helps you to make the TextField number only.

KeyboardOptions class helps you to choose different keyboard types for TextField.

@Composable
fun Example() {
    var value by remember { mutableStateOf("") }
    TextField(
        value = value,
        onValueChange = { value = it },
        keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
        label = { Text("Enter text") },
        maxLines = 2,
        modifier = Modifier.padding(20.dp)
    )
}

KeyboardType.Number will show the keyboard as given in the screenshot.

If you want a keyboard type for a number password then you have to use KeyboardType.NumberPassword.

@Composable
fun Example() {
    var value by remember { mutableStateOf("") }
    TextField(
        value = value,
        onValueChange = { value = it },
        keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.NumberPassword),
        label = { Text("Enter text") },
        maxLines = 2,
        modifier = Modifier.padding(20.dp)
    )
}

Then you will get the following keyboard without characters such as , . etc.

In many cases, you may need a phone keyboard type to enter a mobile phone number. Use KeyboardType.Phone to get the desired result.

@Composable
fun Example() {
    var value by remember { mutableStateOf("") }
    TextField(
        value = value,
        onValueChange = { value = it },
        keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Phone),
        label = { Text("Enter text") },
        maxLines = 2,
        modifier = Modifier.padding(20.dp)
    )
}

Following is the output.

Following is the complete code for your reference.

package com.example.myapplication

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.myapplication.ui.theme.MyApplicationTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyApplicationTheme {
                Surface(
                    color = MaterialTheme.colors.background
                ) {
                    Example()
                }
            }
        }
    }
}

@Composable
fun Example() {
    var value by remember { mutableStateOf("") }
    TextField(
        value = value,
        onValueChange = { value = it },
        keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Phone),
        label = { Text("Enter text") },
        maxLines = 2,
        modifier = Modifier.padding(20.dp)
    )
}


@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    MyApplicationTheme {
        Example()
    }
}

That’s how you add number keyboard type and phone keyboard type in Jetpack Compose.

Mohammed Rashid

Keep Reading