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>
因此,MaterialDatePickerDialogBuilder 具有功能 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 主题,并设置应用主题属性 materialCalendarTheme
、materialCalendarFullscreenTheme
.
例如它看起来像:
<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>
我正在尝试使用来自新 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>
因此,MaterialDatePickerDialogBuilder 具有功能 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 主题,并设置应用主题属性 materialCalendarTheme
、materialCalendarFullscreenTheme
.
例如它看起来像:
<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>