You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose如何实现仅支持年月选择的日期选择器?

实现仅选择年月的日历组件(Jetpack Compose)

方案1:直接使用官方YearMonthPicker(Material3)

Compose Material3 内置了专门的年月选择组件,完全符合需求,无需自定义:

@Composable
fun YearMonthPickerDemo() {
    var selectedYearMonth by remember { mutableStateOf(YearMonth.now()) }
    
    YearMonthPicker(
        selectedYearMonth = selectedYearMonth,
        onYearMonthChange = { selectedYearMonth = it },
        modifier = Modifier.padding(16.dp)
    )
}

方案2:改造现有DatePicker实现年月选择

如果需要基于DatePicker调整,可通过配置DatePickerState限制可选日期,并强制默认进入年月选择模式:

@Composable
fun DatePickerForYearMonth() {
    val datePickerState = rememberDatePickerState(
        selectableDates = object : SelectableDates {
            override fun isSelectable(date: LocalDate): Boolean {
                // 只允许选中当月第一天,用户操作时实际只会选择年月
                return date.dayOfMonth == 1
            }
        }
    )

    // 强制初始显示年份选择界面,引导用户选择年月
    LaunchedEffect(Unit) {
        datePickerState.displayMode = DisplayMode.Year
    }

    DatePicker(
        state = datePickerState,
        modifier = Modifier.padding(16.dp),
        confirmButton = {
            Button(onClick = {
                val selectedDate = datePickerState.selectedDateMillis?.let {
                    Instant.ofEpochMilli(it).atZone(ZoneId.systemDefault()).toLocalDate()
                }
                val selectedYearMonth = selectedDate?.let { YearMonth.from(it) }
                // 在这里处理选中的年月
            }) {
                Text("确认")
            }
        }
    )
}

依赖说明

确保你的项目依赖了足够版本的Compose Material3(1.1.0及以上):

implementation "androidx.compose.material3:material3:1.1.2"

内容的提问来源于stack exchange,提问作者Семён Заросликов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 05:03:17