是否可以切换日期选择器 header 的格式?

Is it possible to switch the format of date picker header?

我正在尝试将 material 设计日期选择器上的 header 更改为与默认格式不同的 select 日期。当前默认值为 Month , year :例如:2021 年 6 月 22 日,但我希望它是 6 月 22 日星期一。它作为第一个设计显示在 material 设计文档中,但没有说明如何进行改变这种格式? 有任何想法吗?

material 设计:https://material.io/components/date-pickers

我想要实现的是:

很遗憾,您不能 更改 MaterialDatePickerDate FormatLocal

由于 MaterialDatePicker 非常严格,因此与许多其他 Material Design Components 一样,我建议您使用备用日期选择器库,例如 MaterialDateTimePicker

基本满足你的所有需求:

  • 更改日期格式:setLocale(Locale locale)
  • 从多个日期 UI 中选择 ✅
  • 非常灵活且易于定制以满足您的需求 ✅

PS:还有一种更流行的选择:android-betterpickers

如果您有任何其他问题,请告诉我。

在查看源代码并尝试了一些东西之后,我确实找到了解决方案。不幸的是,实现起来并不那么简单,我想切换到 MaterialDateTimePicker 仍然是最好的解决方案。

header 的日期到文本的转换由 DateSelector 通过 getSelectionDisplayString(Context context) 完成。请参阅 MaterialDatePicker here 内的 getHeaderText()

遗憾的是,MaterialDatePicker 是最终的,因此您不能简单地创建自己的方法并覆盖此方法。但是,对于给定的构建器,您可以使用 MaterialDatePicker.Builder.customDatePicker(DateSelector selector) 来放置您自己的 DateSelector (source).

Material 使用他们的 SingleDateSelector (source) 进行简单的日期选择。但同样,不可能在此选择器的基础上构建并编写自定义 getSelectionDisplayString 方法,因为 class 受到限制。知道这一点,就需要编写自己的 DateSelector.

构建您自己的 DateSelector 本身就是一项更大的任务。可能可以从 SingleDateSelector 复制,但它使用了一些您也需要复制的私有 classes 和方法。

长话短说,我想这对于“简单地”更改日期格式来说太过分了。