MaterialDatePicker 無法在 Android 上工作

我想将项目的日期选取器更改为 Android 材质组件提供的日期选取器,但它不起作用。

这是我尝试过的代码:

MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();

MaterialDatePicker<Long> picker = builder.build();

picker.show(getSupportFragmentManager(), picker.toString());

这是它的样子:

first image

这是它应该是什么样子的:

second image

谁能告诉我缺少了什么?

谢谢


答案 1

使用Material Components for Android,您可以使用新的MaterialDatePicker

若要正常工作,在你的应用中,你必须使用材质组件主题
通过这种方式,您可以继承选取器的样式和主题。

要选择单个日期,只需使用:

MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();
builder.setTitleText(R.string.your_text);
MaterialDatePicker<Long> picker = builder.build();
picker.show(getSupportFragmentManager(), picker.toString());

要选择范围日期,可以使用日期范围选取器:

MaterialDatePicker.Builder<Pair<Long, Long>> builder =
                    MaterialDatePicker.Builder.dateRangePicker();
CalendarConstraints.Builder constraintsBuilder = new CalendarConstraints.Builder();
builder.setCalendarConstraints(constraintsBuilder.build());
MaterialDatePicker<?> picker = builder.build();
picker.show(getSupportFragmentManager(), picker.toString());

enter image description here

检查模版中使用的颜色。

这些属性定义您的样式。您无需添加它们,默认情况下,它们随“材质组件”主题一起提供。

<!-- Picker styles and themes. -->
<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>

基于这些样式,选取器使用的颜色为:

HeaderLaoyout     -> background:colorPrimary, textColor:colorOnPrimary
HeaderSelection   -> background:colorPrimary, textColor:colorOnPrimary
ConfirmButtons    -> background:colorPrimary, textColor:colorOnPrimary
Buttons           -> background:colorPrimary, textColor:colorOnSurface
HeaderToggleButton->                          textColor:colorOnPrimary
Day               ->                          text:colorOnSurface  stroke:colorOnSurface
SelectedDay       -> background:colorPrimary, textColor:colorOnPrimary
RangeFillColor    -> background:colorPrimary

答案 2

问题出在ColorPrimary上。

我的项目的默认颜色 colorPrimary 是“白色”,材质日期选取器样式使用该颜色Primary 为按钮的背景和文本着色。由于标题文本的颜色也是白色的,因此当有所有内容时,似乎什么都没有。

我通过将样式文件导入我的项目并对项目中的样式进行一些调整来解决它。

谢谢大家的回答,他们都帮助找到了问题!


推荐