Skip to content

NumberPicker ​

NumberPicker is a basic interactive component in Miuix used for selecting a value from a range of numbers by vertical scrolling. The selected item is centered and highlighted, while surrounding items fade out and scale down. Supports infinite scrolling with the wrapAround parameter.

Import ​

kotlin
import top.yukonga.miuix.kmp.basic.NumberPicker

Basic Usage ​

kotlin
var value by remember { mutableIntStateOf(5) }

NumberPicker(
    value = value,
    onValueChange = { value = it },
    range = 0..10
)

Component States ​

Disabled State ​

kotlin
var value by remember { mutableIntStateOf(5) }

NumberPicker(
    value = value,
    onValueChange = { value = it },
    range = 0..10,
    enabled = false
)

Infinite Scrolling ​

When wrapAround is enabled, the picker wraps from the last item back to the first, allowing continuous scrolling.

kotlin
var value by remember { mutableIntStateOf(0) }

NumberPicker(
    value = value,
    onValueChange = { value = it },
    range = 0..23,
    wrapAround = true
)

Properties ​

NumberPicker Properties ​

Property NameTypeDescriptionDefault ValueRequired
valueIntCurrent selected value. If outside range, it will be coerced-Yes
onValueChange(Int) -> UnitCallback invoked when the selected value changes-Yes
modifierModifierModifier applied to the pickerModifierNo
enabledBooleanWhether the picker is enabled for user interactiontrueNo
rangeIntRangeThe range of selectable values0..10No
label(Int) -> StringConverts a value to its display stringNo
visibleItemCountIntNumber of visible items. Must be odd and at least 35No
wrapAroundBooleanWhether the picker wraps around (infinite scrolling)falseNo
colorsNumberPickerColorsColor configuration of the pickerNumberPickerDefaults.colors()No
textStyleTextStyleText style for picker itemsMiuixTheme.textStyles.title1No
itemHeightDpThe height of each item in the pickerNumberPickerDefaults.ItemHeightNo

NumberPickerDefaults Object ​

The NumberPickerDefaults object provides default configurations for the NumberPicker component.

Properties ​

Property NameTypeDescriptionDefault Value
ItemHeightDpDefault height of each item45.dp

Methods ​

Method NameReturn TypeDescription
colors()NumberPickerColorsCreates default color configuration

NumberPickerColors Class ​

Property NameTypeDescription
selectedTextColorColorText color for the selected (center) item
unselectedTextColorColorText color for unselected items
disabledSelectedTextColorColorSelected text color when disabled
disabledUnselectedTextColorColorUnselected text color when disabled

Advanced Usage ​

Custom Label Format ​

kotlin
var hour by remember { mutableIntStateOf(9) }

NumberPicker(
    value = hour,
    onValueChange = { hour = it },
    range = 0..23,
    label = { it.toString().padStart(2, '0') }  // "00", "01", ... "23"
)

Time Picker ​

Combine two NumberPickers to create a time picker.

kotlin
var hour by remember { mutableIntStateOf(16) }
var minute by remember { mutableIntStateOf(30) }

Row(
    horizontalArrangement = Arrangement.Center,
    verticalAlignment = Alignment.CenterVertically,
) {
    NumberPicker(
        value = hour,
        onValueChange = { hour = it },
        range = 0..23,
        label = { it.toString().padStart(2, '0') },
        wrapAround = true,
        modifier = Modifier.weight(1f),
    )
    Text(
        text = ":",
        fontWeight = FontWeight.Bold,
    )
    NumberPicker(
        value = minute,
        onValueChange = { minute = it },
        range = 0..59,
        label = { it.toString().padStart(2, '0') },
        wrapAround = true,
        modifier = Modifier.weight(1f),
    )
}

Custom Visible Item Count ​

kotlin
var value by remember { mutableIntStateOf(5) }

NumberPicker(
    value = value,
    onValueChange = { value = it },
    range = 1..100,
    visibleItemCount = 3
)

Custom Colors ​

kotlin
var value by remember { mutableIntStateOf(5) }

NumberPicker(
    value = value,
    onValueChange = { value = it },
    range = 0..10,
    colors = NumberPickerDefaults.colors(
        selectedTextColor = Color.Red,
        unselectedTextColor = Color.Gray
    )
)

Changelog

Released under the Apache-2.0 License