How do i show number picker with Jetpack compose

Published October 20, 2021


In this Jetpack compose tutorial we will cover how to display number picker component in Jetpack compose. Number Picker is a component which will give option to choose a number from given range. To Display number picker we  will use Compose Number Picker library, which provides a simple to use, lightweight number picker component for Jetpack Compose. It has support for horizontal and vertical orientation.

 

Let's get started

Step 1: Create Android application in Android studio

Step 2: Follow step for setup Jetpack Compose with Android Studio

Step 3: Add required dependencies in build.gradle file.

implementation 'com.chillibits:composenumberpicker:1.1.0'

 

Step 4:

Add Horizontal Number picker

HorizontalNumberPicker(
    min = 10,
    max = 100,
    default = 50,
    onValueChange = { value ->
        Toast.makeText(context, value.toString(), Toast.LENGTH_SHORT).show()
    }
)

 

Here

min: is the Minimum range of the Number

max : is the Maximum value of number

onValueChange :Which is used to handle the number change listener to choose the selected value

 

Similarly we can show vertical number picker by below component

VerticalNumberPicker(
    min = 20,
    max=30,
    default = 20,
    onValueChange = { value ->
        Toast.makeText(context, value.toString(), Toast.LENGTH_SHORT).show()
    }
)

 

Step 5: Run application

 

Create Custom Number Picker using Picker Button in Jetpack Compose

Column {
    PickerButton(

        size = 45.dp,
        drawable = R.drawable.ic_plus_icon,
        enabled = number.value < max.value,
        onClick = {
            if (number.value < max.value) number.value=number.value+1;
            onValueChange(number.value,context)
        }
    )
    Text(
        text = number.value.toString(),
        fontSize = 20.sp,
        modifier = Modifier
            .padding(10.dp)
            .width(IntrinsicSize.Max)
            .align(CenterHorizontally)
    )
    PickerButton(
        size = 45.dp,
        drawable = R.drawable.ic_minus_icon,
        enabled = number.value > min.value,
        onClick = {
            if (number.value > min.value) number.value--
            onValueChange(number.value,context)
        }
    )
}

 

Jetpack compose Number Picker example

 

Complete code for Jetpack Compose Number Picker

package com.example.jetpack.widget

import android.content.Context
import android.widget.Toast
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Menu
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Alignment.Companion.CenterHorizontally
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.chillibits.composenumberpicker.HorizontalNumberPicker
import com.chillibits.composenumberpicker.PickerButton
import com.chillibits.composenumberpicker.VerticalNumberPicker
import com.example.jetpack.R

@Composable
fun PreviewNumberPicker(context:Context) {
    Scaffold(
        // below line we are
        // creating a top bar.
        topBar = {
            TopAppBar(
                // in below line we are
                // adding title to our top bar.
                title = {
                    // inside title we are
                    // adding text to our toolbar.
                    Text(
                        text = "Number Picker in Jetpack Compose",
                        // below line is use
                        // to give text color.
                        color = Color.White
                    )
                },
                navigationIcon = {
                    // navigation icon is use
                    // for drawer icon.
                    IconButton(onClick = { },

                    ) {
                        Icon(Icons.Filled.Menu,"")

                    }
                },
                // below line is use to give background color
                backgroundColor = Color.Blue,

                // content color is use to give
                // color to our content in our toolbar.
                contentColor = Color.White,

                // below line is use to give
                // elevation to our toolbar.
                elevation = 12.dp
            )
        }, content = {
            var number = remember { mutableStateOf(20) }
            val max=remember { mutableStateOf(40) }
            val min=remember { mutableStateOf(10) }
            Box(modifier = Modifier.fillMaxSize()
            ) {
                Column(

                    Modifier.fillMaxHeight().
                    fillMaxWidth(),
                    content = {

                        Text(
                            text = "Horizontal Number Picker",
                            modifier = Modifier.width(IntrinsicSize.Max).align(CenterHorizontally))
                        HorizontalNumberPicker(
                            min = 10,
                            max = 100,
                            default = 50,
                            onValueChange = { value ->
                                Toast.makeText(context, value.toString(), Toast.LENGTH_SHORT).show()
                            }
                        )
                        Text(
                            text = "Vertical Number Picker",
                            modifier = Modifier.width(IntrinsicSize.Max).align(CenterHorizontally))
                        VerticalNumberPicker(

                            min = 20,
                            max=30,
                            default = 20,
                            onValueChange = { value ->
                                Toast.makeText(context, value.toString(), Toast.LENGTH_SHORT).show()
                            }
                        )

                        Spacer(modifier = Modifier.height(20.dp))
                        Text(text="Custom Number Picker")
                        Column {
                            PickerButton(

                                size = 45.dp,
                                drawable = R.drawable.ic_plus_icon,
                                enabled = number.value < max.value,
                                onClick = {
                                    if (number.value < max.value) number.value=number.value+1;
                                    onValueChange(number.value,context)
                                }
                            )
                            Text(
                                text = number.value.toString(),
                                fontSize = 20.sp,
                                modifier = Modifier
                                    .padding(10.dp)
                                    .width(IntrinsicSize.Max)
                                    .align(CenterHorizontally)
                            )
                            PickerButton(
                                size = 45.dp,
                                drawable = R.drawable.ic_minus_icon,
                                enabled = number.value > min.value,
                                onClick = {
                                    if (number.value > min.value) number.value--
                                    onValueChange(number.value,context)
                                }
                            )
                        }
                    },
                    verticalArrangement = Arrangement.Center,
                    horizontalAlignment =Alignment.CenterHorizontally,
                )




            }
        });




}

fun onValueChange(value: Int,context:Context,) {
    Toast.makeText(context, value.toString(), Toast.LENGTH_SHORT).show()
}

 

Conclusion: In this jetpack compose tutorial we covered how to display number picker component in Jetpack compose and create custom number picker with PickerButton.

 


Article Contributed By :
https://www.rrtutors.com/site_assets/profile/assets/img/avataaars.svg

122 Views

Subscribe For Daily Updates

Flutter Questions
Android Questions