跳转到内容

TimePicker

TimePicker 是 COUI 中的基础交互组件,通过时 / 分垂直滚轮选择时间,对应 ColorOS 的 COUITimeLimitPicker。支持 24 小时制与 12 小时制;12 小时制下会增加上午/下午(AM/PM)滚轮,可按语言习惯放在小时列之前或分钟列之后。还可以在选中行旁绘制单位标签(如“时”/“分”),与 COUI 的单位文本一致。

时间由纯数据类 TimeValue 表示;无论显示模式如何,小时始终以 24 小时制(0..23)存储。

引入

kotlin
import io.github.suqi8.coui.kmp.basic.TimePicker
import io.github.suqi8.coui.kmp.basic.TimePickerDefaults
import io.github.suqi8.coui.kmp.basic.TimeValue

基本用法

kotlin
var time by remember { mutableStateOf(TimeValue(hour = 16, minute = 30)) }

TimePicker(
    value = time,
    onValueChange = { time = it }
)

组件状态

12 小时制

is24Hour 为 false 时,小时显示为 1..12,并在分钟列之后显示 AM/PM 滚轮。

kotlin
TimePicker(
    value = time,
    onValueChange = { time = it },
    is24Hour = false
)

禁用状态

kotlin
TimePicker(
    value = time,
    onValueChange = { time = it },
    enabled = false
)

属性

TimePicker 属性

属性名类型说明默认值是否必须
valueTimeValue当前选中的时间(小时始终为 24 小时制)-
onValueChange(TimeValue) -> Unit选中时间变化时的回调函数-
modifierModifier应用于选择器的修饰符Modifier
enabledBoolean是否启用用户交互true
is24HourBoolean小时滚轮是否使用 24 小时制true
amPmFirstBooleanAM/PM 滚轮是否放在小时滚轮之前false
amLabelStringAM/PM 滚轮上「上午」的显示文本TimePickerDefaults.AmLabel
pmLabelStringAM/PM 滚轮上「下午」的显示文本TimePickerDefaults.PmLabel
hourUnitString选中小时旁的单位标签,为空则隐藏TimePickerDefaults.HourUnit
minuteUnitString选中分钟旁的单位标签,为空则隐藏TimePickerDefaults.MinuteUnit
hourColumnWidthDp小时列宽度TimePickerDefaults.HourColumnWidth
minuteColumnWidthDp分钟列宽度TimePickerDefaults.MinuteColumnWidth
amPmColumnWidthDpAM/PM 列宽度TimePickerDefaults.AmPmColumnWidth
colorsNumberPickerColors滚轮的颜色配置NumberPickerDefaults.colors()
textStyleTextStyle滚轮项目的文本样式COUITheme.textStyles.title3
itemHeightDp每个滚轮项目的高度NumberPickerDefaults.ItemHeight
insideMarginPaddingValues滚轮列周围的内边距TimePickerDefaults.InsideMargin

TimeValue 类

属性名类型说明
hourInt小时,24 小时制(0..23)
minuteInt分钟(0..59)

TimePickerDefaults 对象

属性名类型说明默认值
HourColumnWidthDp小时列默认宽度76.dp
MinuteColumnWidthDp分钟列默认宽度76.dp
AmPmColumnWidthDpAM/PM 列默认宽度62.dp
InsideMarginPaddingValues滚轮列周围的默认内边距PaddingValues(vertical = 12.dp)
UnitTextOffsetDp单位标签相对滚轮中心的偏移13.dp
UnitFontSizeTextUnit单位标签的字号14.sp
AmLabelString默认 AM 文本"AM"
PmLabelString默认 PM 文本"PM"
HourUnitString默认小时单位标签(隐藏)""
MinuteUnitString默认分钟单位标签(隐藏)""

进阶用法

单位标签

在选中的时、分旁绘制单位标签,与 COUI 选择器一致:

kotlin
TimePicker(
    value = time,
    onValueChange = { time = it },
    hourUnit = "时",
    minuteUnit = "分"
)

本地化 12 小时制

对于时间格式以上午/下午开头的语言(如中文),可将 AM/PM 滚轮放在最前并本地化其文本:

kotlin
TimePicker(
    value = time,
    onValueChange = { time = it },
    is24Hour = false,
    amPmFirst = true,
    amLabel = "上午",
    pmLabel = "下午",
    hourUnit = "时",
    minuteUnit = "分"
)

自定义颜色

kotlin
TimePicker(
    value = time,
    onValueChange = { time = it },
    colors = NumberPickerDefaults.colors(
        selectedTextColor = Color.Red,
        unselectedTextColor = Color.Gray
    )
)

变更日志

基于 Apache-2.0 许可发布