如何在 Android Compose Material3 DatePicker 中禁用未来日期?

问题描述 投票:0回答:1

我有一个

DatePickerDialog
DatePicker
,两者都是从
androidx.compose.material3
包导入的。我相信应该可以使用
dateValidator
DatePicker 属性禁用未来日期,但我希望在实现方面获得一些帮助。

我的代码的简化版本如下所示:

@Composable
@OptIn(ExperimentalMaterial3Api::class)
fun PastOrPresentDatePicker() {
  val state = rememberDatePickerState()

  DatePickerDialog(
    onDismissRequest = { ... },
    confirmButton = { ... },
    dismissButton = { ... }
  ) {
    DatePicker(state)
  }
}
android kotlin datepicker android-jetpack-compose
1个回答
0
投票

回答我自己的问题,以防其他人发现它有用。

TL;博士

通常与 DatePicker 可组合项一起使用的

rememberDatePickerState
帮助器接受
selectableDates
,可用于允许或禁止某些日期。

完整示例

确保您已在

build.gradle.kts
中将 Material3 的 alpha 或 beta 版本列为依赖项:

dependencies {
  implementation("androidx.compose.material3:material3:1.2.0-beta01")
}

考虑创建以下帮助器以供重用:

// PastOrPresentSelectableDates.kt
object PastOrPresentSelectableDates: SelectableDates {
  override fun isSelectableDate(utcTimeMillis: Long): Boolean {
    return utcTimeMillis <= System.currentTimeMillis()
  }

  override fun isSelectableYear(year: Int): Boolean {
    return year <= LocalDate.now().year
  }
}

在可组合视图中使用它:

// PastOrPresentDatePicker.kt
@Composable
fun PastOrPresentDatePicker() {
  val state = rememberDatePickerState(
    selectableDates = PastOrPresentSelectableDates
  )

  DatePickerDialog(/* your params here */) {
    DatePicker(state)
  }
}

感谢ianhanniballake提供指导。

© www.soinside.com 2019 - 2024. All rights reserved.