2

How to change my spinner date picker to normal calendar with an option to keyboard entry as shown in the attached picture

Here is the code.

 private val datePickerDialog by lazy {
            DatePickerDialog(requireActivity(), R.style.SpinnerDatePickerDialog).apply {
                setTitle(R.string.select_date)
                datePicker.maxDate = LocalDate.now().minusDays(1).toMillis()
                setOnDateSetListener { _, year, month, dayOfMonth ->
                    viewModel.onDateSelected(year, month, dayOfMonth)
                }
            }
        }

enter image description here

speedflow
  • 75
  • 6
  • Does this answer your question? [How to change the style of a DatePicker in android?](https://stackoverflow.com/questions/30239627/how-to-change-the-style-of-a-datepicker-in-android) – Ivo Mar 16 '22 at 09:53
  • Thanks, I checked that discussion and looking for a picker with optional keyboard entry. – speedflow Mar 17 '22 at 08:50

1 Answers1

0

Follow the below code to achieve a material calendar view.

(1) Add the below dependency in your app Gradle.

implementation 'com.google.android.material:material:1.5.0'

(2) Use the below style for your activity.

    <!-- Base application theme. -->
<style name="ScreenTheme" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="materialCalendarStyle">@style/Widget.MaterialComponents.MaterialCalendar</item>
    <item name="materialCalendarFullscreenTheme">@style/ThemeOverlay.MaterialComponents.MaterialCalendar.Fullscreen</item>
    <item name="materialCalendarTheme">@style/ThemeOverlay.MaterialComponents.MaterialCalendar</item>
</style>

(3) Set above style in Manifest.xml file with activity.

<activity
        android:name=".DashboardActivity"
        android:screenOrientation="portrait"
        android:theme="@style/ScreenTheme"
        android:windowSoftInputMode="stateAlwaysHidden" />

(4) Add the below code with a button click.

val datePicker =
                        MaterialDatePicker.Builder.datePicker()
                                .setTitleText("Select date")
                                .setSelection(MaterialDatePicker.todayInUtcMilliseconds())
                                .build()

                datePicker.show(childFragmentManager,"")
  • Use childFragmentManager if you want a calendar with fragment otherwise use supportFragmentManager with activity.

Output: enter image description here

Faldu Jaldeep
  • 545
  • 2
  • 15