跳转到内容

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 许可发布