【问题标题】:Android custom calendar / date pickerAndroid 自定义日历/日期选择器
【发布时间】:2023-03-30 19:09:01
【问题描述】:

这是新的默认 DatePickerDialog 小部件从 Android 5.0 开始的样子:

我的项目经理不太喜欢这个。他们想要的是 Marshmallow & Lollipop 之前的“旧式” Holo 日期选择器。像这样的:

我有两个选择:

  • 使用由其他人开发的现有日历小部件,具有与上述相同的外观和感觉。
  • 创建我自己的具有完整日历功能的日历小部件。

如果我要创建自己的小部件,那么创建 UI 就足够简单了。我的问题是,如何为这样的日历编写业务逻辑,即如何用真实数据支持它?如何计算闰年以及不同月份的天数? 最重要的是,我需要三个 NumberPickers 在最小和最大范围方面保持同步。应该可以滚动超出最小和最大限制。这是我一直没能解决的问题。

这是我到目前为止所做的:

  • 我用过 NumberPicker 里面的小部件 DialogFragment, 我用过 setMinValue()setMaxValue() 设置每个NumberPicker的范围。
  • 当一年发生变化时(比如从 2​​011 年到 2012 年),我计算数字 使用

    在当月的天数
       cal = new GregorianCalendar(y, m, d);
       daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    

    here 所述。

  • 当用户从 12 月到 1 月或从 1 月到 12 月滚动时, 我以编程方式滚动年份选择器以增加或 如所述分别递减 here
  • 使用setWrapSelectorWheel() 可防止日、月和年的选择器滚动超出其最小值和最大值。

所以我的问题是,是否有一个预先存在的小部件,例如我可以使用的这个小部件?或者,有没有办法用真实的日历数据支持NumberPickers,并让它们在最小和最大日期范围内同步滚动?请指导我。所有答案将不胜感激。

编辑:

虽然给出的答案有效,但值得注意的是还有一种更好的方法:将 DatePicker 包装在 DialogFragment 中。

【问题讨论】:

  • 你与日历的业务逻辑无关。只需使用 Calendar API 并使用您的 UI。
  • @PankajKumar:Calendar API 可以在这里使用吗?我的主要问题是在滚动月份时同步滚动三个选择器,并防止选择器滚动超出最小最大范围(再次同步)...

标签: java android android-custom-view android-calendar android-datepicker


【解决方案1】:

您可以使用 API 日期选择器并使用此构造函数告诉它使用 Holo 设计:DatePickerDialog (Context, int, DatePickerDialog.OnDateSetListener, int, int, int)

请参阅有关此问题的 cmets:DatePicker crash in samsung with android 5.0

您可能需要稍微调整一下主题。

以下是我们如何在实际中使用它:https://github.com/dmfs/opentasks/blob/master/src/org/dmfs/tasks/widget/TimeFieldEditor.java#L437

【讨论】:

  • 感谢您的反馈....这很有帮助...如果没有其他人给出更好的答案,我会将其标记为正确答案...:)
  • 不确定答案可能有多好 ;-)
猜你喜欢
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
相关资源
最近更新 更多