【问题标题】:Is it possible to switch the format of date picker header?是否可以切换日期选择器标题的格式?
【发布时间】:2021-06-23 13:45:26
【问题描述】:

当您选择与默认格式不同的日期时,我正在尝试更改材料设计日期选择器上的标题。当前默认值为月,年:例如:2021 年 6 月 22 日,但我希望它是 6 月 22 日星期一。它在材料设计文档中显示为第一个设计,但没有指示如何更改此格式? 有任何想法吗?

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

我想要实现的是:

【问题讨论】:

    标签: android android-datepicker


    【解决方案1】:

    很遗憾,您可以更改Date FormatLocalMaterialDatePicker

    由于MaterialDatePicker 和许多其他Material Design Components 的限制非常严格,我建议您使用备用日期选择器库,例如MaterialDateTimePicker

    它基本上可以满足您的所有需求:

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

    PS:还有一种更流行的替代方案:android-betterpickers

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

    【讨论】:

    • 感谢您的回复。我有点困惑为什么他们会在设计中添加它,当它无法实现时?当您打开日期选择器的材料设计文档时,它会弹出的第一件事:material.io/components/date-pickers
    • @AngelaHeely 绝对同意,我对 Material Components 感到沮丧。如果您不愿意“按原样”使用它们,那么我完全不建议使用它们(即使将来也是如此)。我的一个故事:我有一个使用 Material Design Tab bar 的应用程序。设计师突然想调整一些边距。但是猜猜你不能改变它的边距值。所以我不得不从头开始重新创建标签栏......如果你觉得这个答案有帮助,请接受我的回答:)
    • 我们有什么办法可以做到这一点吗?
    • @AngelaHeely,肯定总有一个技巧:您可以更改应用程序的区域设置以实现您想要的行为。但是,不同的 Android 制造商有自己的本地化实现方式。所以,这个黑客是不安全和一致的。例如,三星和华辉对待语言环境的方式不同。
    • 作为一名开发人员,我相信consistency 是成功的关键。所以我总是选择走安全的路。我的意思是,MaterialDateTimePicker. 之类的库有 4.7k+ 星是有原因的...
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多