跳转到内容

DatePicker

DatePicker 是 COUI 中的基础交互组件,通过三列垂直滚轮(年 / 月 / 日)选择日期,对应 ColorOS 的 COUIDatePicker。日列范围会随所选年月自动联动(含闰年),切换到天数更少的月份时日值会自动收敛。所有列均支持无限循环滚动。

日期由纯数据类 DateValue 表示,不依赖任何日期时间库。

引入

kotlin
import io.github.suqi8.coui.kmp.basic.DatePicker
import io.github.suqi8.coui.kmp.basic.DatePickerDefaults
import io.github.suqi8.coui.kmp.basic.DateValue
import io.github.suqi8.coui.kmp.basic.NumberPickerDefaults

基本用法

kotlin
var date by remember { mutableStateOf(DateValue(year = 2026, month = 7, day = 26)) }

DatePicker(
    value = date,
    onValueChange = { date = it }
)

组件状态

禁用状态

kotlin
DatePicker(
    value = date,
    onValueChange = { date = it },
    enabled = false
)

属性

DatePicker 属性

属性名类型说明默认值是否必须
valueDateValue当前选中的日期,超出范围的字段会被修正-
onValueChange(DateValue) -> Unit选中日期变化时的回调函数-
modifierModifier应用于选择器的修饰符Modifier
enabledBoolean是否启用用户交互true
yearRangeIntRange可选择的年份范围DatePickerDefaults.YearRange
yearLabel(Int) -> String年份的显示文本转换函数DatePickerDefaults.YearLabel
monthLabel(Int) -> String月份(1..12)的显示文本转换函数DatePickerDefaults.MonthLabel
dayLabel(Int) -> String日的显示文本转换函数DatePickerDefaults.DayLabel
yearColumnWidthDp年份列宽度DatePickerDefaults.YearColumnWidth
monthColumnWidthDp月份列宽度DatePickerDefaults.MonthColumnWidth
dayColumnWidthDp日列宽度DatePickerDefaults.DayColumnWidth
colorsNumberPickerColors滚轮的颜色配置NumberPickerDefaults.colors()
textStyleTextStyle滚轮项目的文本样式COUITheme.textStyles.title3
itemHeightDp每个滚轮项目的高度NumberPickerDefaults.ItemHeight
insideMarginPaddingValues滚轮列周围的内边距DatePickerDefaults.InsideMargin

DateValue 类

属性名类型说明
yearInt年份(如 2026)
monthInt月份,从 1 开始(1 = 一月)
dayInt日,从 1 开始

DatePickerDefaults 对象

属性名类型说明默认值
YearRangeIntRange默认可选年份范围1900..2100
YearColumnWidthDp年份列默认宽度76.dp
MonthColumnWidthDp月份列默认宽度96.dp
DayColumnWidthDp日列默认宽度62.dp
InsideMarginPaddingValues滚轮列周围的默认内边距PaddingValues(vertical = 12.dp)
YearLabel(Int) -> String纯年份数字
MonthLabel(Int) -> String英文月份缩写"Jan".."Dec"
DayLabel(Int) -> String两位补零数字"01".."31"

进阶用法

自定义年份范围

kotlin
DatePicker(
    value = date,
    onValueChange = { date = it },
    yearRange = 2000..2030
)

本地化标签

传入自定义标签函数以本地化滚轮项目。例如中文 COUI 风格会把单位嵌入每个项目:

kotlin
DatePicker(
    value = date,
    onValueChange = { date = it },
    yearLabel = { "${it}年" },
    monthLabel = { "${it}月" },
    dayLabel = { "${it}日" }
)

自定义颜色

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

变更日志

基于 Apache-2.0 许可发布