Legacy Android DatePickerDialog dialogs look outdated on modern Material 3 apps. The Google Material Components library provides MaterialDatePicker, an accessible date picker dialog featuring built-in calendar constraints, range selection support, and dynamic theme colors.
Kotlin Implementation: Birthdate MaterialDatePicker
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.datepicker.CalendarConstraints
import com.google.android.material.datepicker.DateValidatorPointBackward
import com.google.android.material.datepicker.MaterialDatePicker
import java.text.SimpleDateFormat
import java.util.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
constrainBirthdateAndShowPicker()
}
private fun constrainBirthdateAndShowPicker() {
// Restrict valid selectable dates to today or past dates only
constrainBirthdatePicker()
}
private fun constrainBirthdatePicker() {
val constraints = CalendarConstraints.Builder()
.setValidator(DateValidatorPointBackward.now())
.build()
val datePicker = MaterialDatePicker.Builder.datePicker()
.setTitleText("Select Your Birthdate")
.setSelection(MaterialDatePicker.todayInUtcMilliseconds())
.setCalendarConstraints(constraints)
.build()
datePicker.addOnPositiveButtonClickListener { selectionMillis ->
val formatter = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())
formatter.timeZone = TimeZone.getTimeZone("UTC")
val dateString = formatter.format(Date(selectionMillis))
findViewById<TextView>(R.id.selectedDateText).text = "Birthdate: $dateString"
}
findViewById<Button>(R.id.btnSelectDate).setOnClickListener {
datePicker.show(supportFragmentManager, "BIRTHDATE_PICKER")
}
}
}
Comments and corrections