我有一个
DatePickerDialog
和 DatePicker
,两者都是从 androidx.compose.material3
包导入的。我相信应该可以使用 dateValidator
DatePicker 属性禁用未来日期,但我希望在实现方面获得一些帮助。
我的代码的简化版本如下所示:
@Composable
@OptIn(ExperimentalMaterial3Api::class)
fun PastOrPresentDatePicker() {
val state = rememberDatePickerState()
DatePickerDialog(
onDismissRequest = { ... },
confirmButton = { ... },
dismissButton = { ... }
) {
DatePicker(state)
}
}
回答我自己的问题,以防其他人发现它有用。
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提供指导。