Android Tutorial
Software Setup and Configuration
Android Studio
File Structure
Components
Core Topics
Layout
View
Button
Intent and Intent Filters
Toast
RecyclerView
Fragments
Adapters
Other UI Component
Image Loading Libraries
Date and Time
Material Design
Bars
Working with Google Maps
Chart
Animation
Database
Advance Android
Jetpack
Architecture
App Publish
App Monetization
Material Design Date Picker in Android not only offers basic date picking functionalities but also comes with a host of customizable attributes and capabilities. Here are some of the advanced functionalities and customization options available with the Material Design Date Picker:
You can set constraints to allow selection only within a specific date range.
val constraintsBuilder = CalendarConstraints.Builder() // Example: Setting range from today to 30 days from now val startMonth = MaterialDatePicker.todayInUtcMilliseconds() val endMonth = startMonth + TimeUnit.DAYS.toMillis(30) constraintsBuilder.setStart(startMonth) constraintsBuilder.setEnd(endMonth) val datePickerBuilder = MaterialDatePicker.Builder.datePicker() datePickerBuilder.setCalendarConstraints(constraintsBuilder.build())
You can customize the header of the date picker using themes.
You can change the color of the selected date.
<!-- In your styles.xml --> <style name="DatePickerTheme" parent="ThemeOverlay.MaterialComponents.MaterialCalendar"> <item name="colorPrimary">@color/your_color</item> </style>
Then apply the theme:
val datePickerBuilder = MaterialDatePicker.Builder.datePicker() datePickerBuilder.setTheme(R.style.DatePickerTheme)
You can make specific days unselectable based on custom logic, like disabling weekends.
constraintsBuilder.setValidator(object : CalendarConstraints.DateValidator { override fun isValid(date: Long): Boolean { val dayOfWeek = Calendar.getInstance().apply { timeInMillis = date }.get(Calendar.DAY_OF_WEEK) return dayOfWeek != Calendar.SATURDAY && dayOfWeek != Calendar.SUNDAY } override fun writeToParcel(dest: Parcel, flags: Int) { // Implement required parcelable methods } })
By default, the date picker starts with a month view, but you can make it start with the year view:
val datePickerBuilder = MaterialDatePicker.Builder.datePicker() datePickerBuilder.setCalendarConstraints(constraintsBuilder.build()) datePickerBuilder.setTitleText("Select year")
You can toggle between calendar mode and spinner mode. However, note that spinner mode might not be consistent with Material Design guidelines:
<DatePicker android:datePickerMode="spinner" />
The Material Design Date Picker allows for picking individual dates, ranges, or even multiple individual dates:
// Single date (default) val singleDateBuilder = MaterialDatePicker.Builder.datePicker() // Date range val dateRangeBuilder = MaterialDatePicker.Builder.dateRangePicker() // Multiple dates (requires enabling in CalendarConstraints) constraintsBuilder.setSelectionMode(CalendarConstraints.SELECTION_MODE_MULTIPLE) val multipleDatesBuilder = MaterialDatePicker.Builder.datePicker() multipleDatesBuilder.setCalendarConstraints(constraintsBuilder.build())
These are just a few of the extensive functionalities and customization options available with the Material Design Date Picker. The library is designed to be versatile to cater to a wide range of use cases, all while ensuring a consistent and user-friendly experience.
Customizing Material Date Picker appearance and styles:
ThemeOverlay.MaterialComponents.MaterialCalendar
. Apply it to the MaterialDatePicker
instance.<style name="CustomDatePickerTheme" parent="ThemeOverlay.MaterialComponents.MaterialCalendar"> <!-- Add custom styling here --> </style>
MaterialDatePicker<Long> datePicker = MaterialDatePicker.Builder.datePicker() .setTheme(R.style.CustomDatePickerTheme) .build(); datePicker.show(getSupportFragmentManager(), datePicker.toString());
Additional functionalities of MaterialDatePickerDialogFragment in Android:
MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker(); builder.setTitleText("Select a Date"); builder.setCalendarConstraints(constraints); MaterialDatePicker<Long> datePicker = builder.build(); datePicker.show(getSupportFragmentManager(), datePicker.toString());
Range selection in Material Design Date Picker for Android:
MaterialDatePicker.Builder.rangePicker()
.MaterialDatePicker<Pair<Long, Long>> rangeDatePicker = MaterialDatePicker.Builder.rangePicker().build(); rangeDatePicker.show(getSupportFragmentManager(), rangeDatePicker.toString());
Styling and theming Material Design Date Picker in Android:
<style name="CustomDatePickerTheme" parent="ThemeOverlay.MaterialComponents.MaterialCalendar"> <!-- Add custom styling here --> </style>
MaterialDatePicker<Long> datePicker = MaterialDatePicker.Builder.datePicker() .setTheme(R.style.CustomDatePickerTheme) .build(); datePicker.show(getSupportFragmentManager(), datePicker.toString());
Handling events and callbacks with Material Date Picker:
datePicker.addOnPositiveButtonClickListener(selection -> { // Handle date selection }); rangeDatePicker.addOnPositiveButtonClickListener(selection -> { // Handle range selection });
Using Material Design Date Picker with different locales:
datePicker.setLocale(Locale.FRANCE);
Working with time components in Material Date Picker:
MaterialDatePicker.Builder
to create a date and time picker.MaterialDatePicker<Long> dateTimePicker = MaterialDatePicker.Builder.datePicker() .setSelection(MaterialDatePicker.todayInUtcMilliseconds()) .build(); dateTimePicker.show(getSupportFragmentManager(), dateTimePicker.toString());
Material Design Date Picker library and extensions in Android:
implementation 'com.google.android.material:material:1.5.0'