[MaterialDatePicker] Cannot use as normal fragment.

Author: kolynehCreated May 26, 2023Updated Jul 24, 2026
LabelsbugWidget: DatePicker

Description: Cannot use MaterialDatePicker as normal fragment to add to a fragment container.

Expected behavior: A DialogFragment should be used as a normal Fragment.

Source code:

When using dynamic color theme and them add MaterialDatePicker as a normal fragment via:

        val picker = MaterialDatePicker.Builder.datePicker().build()
        picker.showsDialog = false
        supportFragmentManager.beginTransaction().add(R.id.container, picker).commit()

then we got crashed:

com.example.materialdatepickerissue E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.materialdatepickerissue, PID: 3568
    android.view.InflateException: Binary XML file line #23 in com.example.materialdatepickerissue:layout/mtrl_picker_dialog: Binary XML file line #31: You must supply a layout_width attribute., theme={InheritanceMap=[id=0x7f100268com.example.materialdatepickerissue:style/Theme.MaterialDatePickerIssue, id=0x7f10022fcom.example.materialdatepickerissue:style/Theme.Material3.DynamicColors.DayNight, id=0x7f100230com.example.materialdatepickerissue:style/Theme.Material3.DynamicColors.Light, id=0x7f100231com.example.materialdatepickerissue:style/Theme.Material3.Light, id=0x7f10005bcom.example.materialdatepickerissue:style/Base.Theme.Material3.Light, id=0x7f1000adcom.example.materialdatepickerissue:style/Base.V24.Theme.Material3.Light, id=0x7f100087com.example.materialdatepickerissue:style/Base.V14.Theme.Material3.Light, id=0x7f100256com.example.materialdatepickerissue:style/Theme.MaterialComponents.Light, id=0x7f100068com.example.materialdatepickerissue:style/Base.Theme.MaterialComponents.Light, id=0x7f1000a1com.example.materialdatepickerissue:style/Base.V21.Theme.MaterialComponents.Light, id=0x7f10008fcom.example.materialdatepickerissue:style/Base.V14.Theme.MaterialComponents.Light, id=0x7f100090com.example.materialdatepickerissue:style/Base.V14.Theme.MaterialComponents.Light.Bridge, id=0x7f100134com.example.materialdatepickerissue:style/Platform.MaterialComponents.Light, id=0x7f100210com.example.materialdatepickerissue:style/Theme.AppCompat.Light, id=0x7f100050com.example.materialdatepickerissue:style/Base.Theme.AppCompat.Light, id=0x7f1000b3com.example.materialdatepickerissue:style/Base.V28.Theme.AppCompat.Light, id=0x7f1000b0com.example.materialdatepickerissue:style/Base.V26.Theme.AppCompat.Light, id=0x7f1000aacom.example.materialdatepickerissue:style/Base.V23.Theme.AppCompat.Light, id=0x7f1000a8com.example.materialdatepickerissue:style/Base.V22.Theme.AppCompat.Light, id=0x7f10009dcom.example.materialdatepickerissue:style/Base.V21.Theme.AppCompat.Light, id=0x7f1000b6com.example.materialdatepickerissue:style/Base.V7.Theme.AppCompat.Light, id=0x7f100131com.example.materialdatepickerissue:style/Platform.AppCompat.Light, id=0x7f10013ccom.example.materialdatepickerissue:style/Platform.V25.AppCompat.Light, id=0x1030241android:style/Theme.Material.Light.NoActionBar, id=0x1030237android:style/Theme.Material.Light, id=0x103000candroid:style/Theme.Light, id=0x1030005android:style/Theme],

It say that layout/mtrl_picker_dialog is missing layout_width attribute, found this is missing in mtrl_picker_header_dialog.xml that controled by ?attr/materialCalendarHeaderLayout, which is :

<style name="Widget.Material3.MaterialCalendar.HeaderLayout" parent="Widget.MaterialComponents.MaterialCalendar.HeaderLayout">
    <item name="android:background">@android:color/transparent</item>
  </style>

 <style name="Widget.MaterialComponents.MaterialCalendar.HeaderLayout" parent="android:Widget">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">@dimen/mtrl_calendar_header_height</item>
    <item name="android:background">?attr/colorPrimary</item>
  </style>

It's odd.

Minimal sample app repro:

MaterialDatePickerIssue

Android API version: Android API 33

Material Library version: 1.9.0

Device: AVD API 33

Source: material-components/material-components-android