Android MaterialDatePickerDialog 主题

Android MaterialDatePickerDialog theme

我正在尝试使用来自新 Google Material 库的日期选择器对话框。现在我坚持使用对话框主题,因为我正在处理一些遗留问题。单一的主题 activity 也不适合我的目的(例如有白色原色和次要和主要变体等)

<item name="colorPrimary">@color/main_color_background</item>
<item name="colorSecondary">@color/main_color_background</item>
<item name="colorSecondaryVariant">@color/main_color_background</item>
<item name="colorPrimaryVariant">@color/main_color_background</item>

因此,MaterialDatePickerDialogBu​​ilder 具有功能 setTheme(resId)。但是当我设置新的合适的主题对话框时变得非常难看。Screenshot of ugly dialog。我试图在我的主题中设置任​​何参数,但看起来并没有更好。

<style name="TestTheme" parent="@android:style/Widget.Material.Light.DatePicker">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryVariant">@color/primaryVariant</item>
    <item name="android:colorBackground">@color/background</item>
    <item name="colorSurface">@color/surface</item>
    <item name="colorError">@color/error</item>
</style>

我可能忘记了什么?我不知道,我还能尝试什么。

在我的案例中,问题解决方案是覆盖日期选择器对话框的 material 主题,并设置应用主题属性 materialCalendarThemematerialCalendarFullscreenTheme.

例如它看起来像:

<style name="Widget.Custom.MaterialCalendar" parent="ThemeOverlay.MaterialComponents.Dialog">
    <item name="materialCalendarStyle">@style/Widget.Custom.MaterialCalendarStyle</item>

    <!-- Header Styles -->
    <item name="materialCalendarHeaderLayout">
        @style/Widget.Custom.MaterialCalendar.HeaderLayout
    </item>
    <item name="materialCalendarHeaderDivider">
        @style/Widget.Custom.MaterialCalendar.HeaderDivider
    </item>
    <item name="materialCalendarHeaderTitle">
        @style/Widget.Custom.MaterialCalendar.HeaderTitle
    </item>
    <item name="materialCalendarHeaderSelection">
        @style/Widget.Custom.MaterialCalendar.HeaderSelection
    </item>
    <item name="materialCalendarHeaderConfirmButton">
        @style/Widget.Custom.MaterialCalendar.HeaderConfirmButton
    </item>
    <item name="materialCalendarHeaderToggleButton">
        @style/Widget.Custom.MaterialCalendar.HeaderToggleButton
    </item>

    <!-- Grid Styles -->
    <item name="materialCalendarDay">@style/Widget.Custom.MaterialCalendar.DayTextView
    </item>

    <!-- Action Styles -->
    <item name="buttonBarPositiveButtonStyle">
        @style/Widget.Custom.Button.TextButton.MaterialCalendar.ButtonBar
    </item>
    <item name="buttonBarNegativeButtonStyle">
        @style/Widget.Custom.Button.TextButton.MaterialCalendar.ButtonBar
    </item>
    <item name="materialButtonStyle">
        @style/Widget.Custom.Button.TextButton.MaterialCalendar.TextButton
    </item>
</style>