【发布时间】:2021-06-23 13:45:26
【问题描述】:
当您选择与默认格式不同的日期时,我正在尝试更改材料设计日期选择器上的标题。当前默认值为月,年:例如:2021 年 6 月 22 日,但我希望它是 6 月 22 日星期一。它在材料设计文档中显示为第一个设计,但没有指示如何更改此格式? 有任何想法吗?
【问题讨论】:
标签: android android-datepicker
当您选择与默认格式不同的日期时,我正在尝试更改材料设计日期选择器上的标题。当前默认值为月,年:例如:2021 年 6 月 22 日,但我希望它是 6 月 22 日星期一。它在材料设计文档中显示为第一个设计,但没有指示如何更改此格式? 有任何想法吗?
【问题讨论】:
标签: android android-datepicker
很遗憾,您可以不更改Date Format 和Local 的MaterialDatePicker。
由于MaterialDatePicker 和许多其他Material Design Components 的限制非常严格,我建议您使用备用日期选择器库,例如MaterialDateTimePicker。
它基本上可以满足您的所有需求:
setLocale(Locale locale)✅PS:还有一种更流行的替代方案:android-betterpickers
如果您有任何其他问题,请告诉我。
【讨论】:
consistency 是成功的关键。所以我总是选择走安全的路。我的意思是,MaterialDateTimePicker. 之类的库有 4.7k+ 星是有原因的...
在查看源代码并尝试了一些东西后,我确实找到了解决方案。不幸的是,实现起来并不那么简单,我想切换到MaterialDateTimePicker 仍然是这里最好的解决方案。
标题从日期到文本的转换由DateSelector 通过getSelectionDisplayString(Context context) 完成。请参阅getHeaderText() 内部的MaterialDatePicker here。
遗憾的是,MaterialDatePicker 是最终的,因此您不能简单地创建自己的方法并覆盖此方法。但是,使用给定的 Builder,您可以使用 MaterialDatePicker.Builder.customDatePicker(DateSelector selector) 来放置您自己的 DateSelector (source)。
Material 使用他们的SingleDateSelector (source) 进行简单的日期选择。但同样,不可能在此选择器的基础上编写自定义 getSelectionDisplayString 方法,因为该类受到限制。知道了这一点,就需要自己写DateSelector了。
建立自己的DateSelector 本身就是一项更大的任务。可能可以从SingleDateSelector 复制,但它也使用了一些您需要复制的私有类和方法。
长话短说,我想这对于“简单地”更改日期格式来说太过分了。
【讨论】: