-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
VerticalNumberPicker.kt
62 lines (58 loc) 路 1.85 KB
/
VerticalNumberPicker.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
* Copyright 漏 Marc Auberer 2021-2023. All rights reserved
*/
package com.chillibits.composenumberpicker
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment.Companion.CenterHorizontally
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
@Preview(name = "Vertical number picker")
@Composable
fun VerticalNumberPicker(
modifier: Modifier = Modifier,
width: Dp = 45.dp,
min: Int = 0,
max: Int = 10,
default: Int = min,
onValueChange: (Int) -> Unit = {},
) {
val number = remember { mutableStateOf(default) }
Column {
PickerButton(
size = width,
drawable = R.drawable.ic_arrow_up,
enabled = number.value < max,
onClick = {
if (number.value < max) number.value++
onValueChange(number.value)
}
)
Text(
text = number.value.toString(),
fontSize = (width.value / 2).sp,
modifier = Modifier
.padding(10.dp)
.width(IntrinsicSize.Max)
.align(CenterHorizontally)
)
PickerButton(
size = width,
drawable = R.drawable.ic_arrow_down,
enabled = number.value > min,
onClick = {
if (number.value > min) number.value--
onValueChange(number.value)
}
)
}
}