如何在Android中更改“MaterialDatePicker”的主题?

10

我使用了 MaterialDatePicker 来选择单个日期,也成功完成了这个任务,但是我无法更改标题和按钮的主题。

        MaterialDatePicker.Builder builder;
        MaterialDatePicker materialDatePicker;

        long today = MaterialDatePicker.todayInUtcMilliseconds();
        CalendarConstraints.Builder con = new CalendarConstraints.Builder();
        con.setValidator(DateValidatorPointForward.now());
        builder.setSelection(today);
        builder.setCalendarConstraints(con.build());

        materialDatePicker = builder.build();

        findViewById(R.id.startCalender).setOnClickListener(v ->
                materialDatePicker.show(getSupportFragmentManager(), builder.toString())
        );

        materialDatePicker.addOnPositiveButtonClickListener(selection -> 
        Toast.makeText(this, materialDatePicker.getHeaderText(), 
        Toast.LENGTH_SHORT).show());

Screenshot attached


请在 GitHub 上查看它们的示例。该存储库有关于如何更改主题和颜色的示例。 - denvercoder9
@denvercoder9 他们的样例是用Java写的,而不是Kotlin。此外,他们从头开始实现所有样板文件,没有模块化的解决方案。 - IgorGanapolsky
1个回答

22

你有不同的选择。
你可以使用:

builder.setTheme(R.style.MaterialCalendarTheme);

随着:

  <style name="MaterialCalendarTheme" parent="ThemeOverlay.MaterialComponents.MaterialCalendar">
    <!-- just override the colors used in the default style -->
    <item name="colorOnPrimary">@color/primaryDarkColor</item>
    <item name="colorPrimary">@color/primaryLightColor</item>
  </style>

或者您可以使用类似以下的内容:

  <style name="MaterialCalendarTheme" parent="ThemeOverlay.MaterialComponents.MaterialCalendar">

    <!-- Header panel -->
    <item name="materialCalendarHeaderLayout">@style/MaterialCalendar.HeaderLayout1</item>
    <!-- Buttons -->
    <item name="buttonBarPositiveButtonStyle">@style/TextButton.Dialog1</item>
    <item name="buttonBarNegativeButtonStyle">@style/TextButton.Dialog1</item>
  </style>
  <style name="MaterialCalendar.HeaderLayout1" parent="Widget.MaterialComponents.MaterialCalendar.HeaderLayout">
    <!--<item name="android:background">?attr/colorPrimary</item>-->
    <item name="android:background">@color/primaryLightColor</item>
  </style>
  <style name="TextButton.Dialog1" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
    <item name="android:textColor">@color/white</item>
    <item name="backgroundTint">@color/primaryDarkColor</item>
  </style>

在此输入图片描述


这看起来不像是来自Google的真正MaterialDatePicker。积极/消极按钮没有出现在屏幕底部。 - IgorGanapolsky
嘿,我怎么改变日历的背景?不是标题。 - Valeriy
1
适用于颜色完美, 但无法更改正负按钮文本,自定义这个太麻烦了。 - Kostyan Gorbach
1
@KostyanGorbach 关于文本,请查看此答案:https://stackoverflow.com/questions/59287906/change-button-text-in-new-materialdatepicker/59288130#59288130 - Gabriele Mariotti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接