DatePicker
Composable Component
Full screen DatePicker
with day, month, year.
Android
@RequiresApi(Build.VERSION_CODES.O)
@Composable
public fun DatePicker(
initialDate: LocalDate,
onDatePicked: (LocalDate) -> Unit,
modifier: Modifier = Modifier,
minValidDate: LocalDate? = null,
maxValidDate: LocalDate? = null,
datePickerType: DatePickerType = DatePickerDefaults.datePickerType,
colors: DatePickerColors = DatePickerDefaults.datePickerColors(),
)
Parameters
initialDate | The initial value to be displayed in the DatePicker. |
onDatePicked | The callback that is called when the user confirms the date selection. It provides the selected date as LocalDate |
modifier | Modifier to be applied to the Box containing the UI elements. |
minValidDate | Optional minimum date that can be selected in the DatePicker (inclusive). |
maxValidDate | Optional maximum date that can be selected in the DatePicker (inclusive). |
datePickerType | The different DatePickerType supported by this DatePicker . |
colors | DatePickerColors to be applied to the DatePicker. |
Code Examples
DatePickerFutureOnlySample
@Composable
fun DatePickerFutureOnlySample() {
val currentDate = LocalDate.now()
var showDatePicker by remember { mutableStateOf(true) }
var datePickerDate by remember { mutableStateOf(LocalDate.now()) }
val formatter =
DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
.withLocale(LocalConfiguration.current.locales[0])
if (showDatePicker) {
DatePicker(
initialDate = datePickerDate, // Initialize with last picked date on reopen
onDatePicked = {
datePickerDate = it
showDatePicker = false
},
datePickerType = DatePickerType.YearMonthDay,
minValidDate = currentDate,
)
} else {
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
Button(
onClick = { showDatePicker = true },
label = { Text("Selected Date") },
secondaryLabel = { Text(datePickerDate.format(formatter)) },
icon = { Icon(imageVector = Icons.Filled.Edit, contentDescription = "Edit") },
)
}
}
}
DatePickerSample
@Composable
fun DatePickerSample() {
var showDatePicker by remember { mutableStateOf(true) }
var datePickerDate by remember { mutableStateOf(LocalDate.now()) }
val formatter =
DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
.withLocale(LocalConfiguration.current.locales[0])
if (showDatePicker) {
DatePicker(
initialDate = datePickerDate, // Initialize with last picked date on reopen
onDatePicked = {
datePickerDate = it
showDatePicker = false
},
)
} else {
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
Button(
onClick = { showDatePicker = true },
label = { Text("Selected Date") },
secondaryLabel = { Text(datePickerDate.format(formatter)) },
icon = { Icon(imageVector = Icons.Filled.Edit, contentDescription = "Edit") },
)
}
}
}
DatePickerYearMonthDaySample
@Composable
fun DatePickerYearMonthDaySample() {
var showDatePicker by remember { mutableStateOf(true) }
var datePickerDate by remember { mutableStateOf(LocalDate.now()) }
val formatter =
DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
.withLocale(LocalConfiguration.current.locales[0])
if (showDatePicker) {
DatePicker(
initialDate = datePickerDate, // Initialize with last picked date on reopen
onDatePicked = {
datePickerDate = it
showDatePicker = false
},
datePickerType = DatePickerType.YearMonthDay,
)
} else {
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
Button(
onClick = { showDatePicker = true },
label = { Text("Selected Date") },
secondaryLabel = { Text(datePickerDate.format(formatter)) },
icon = { Icon(imageVector = Icons.Filled.Edit, contentDescription = "Edit") },
)
}
}
}
Create your own Component Library
Material Components are meant to be used as is and they do not allow customizations. To build your own Jetpack Compose component library use Compose Unstyled