【发布时间】:2023-03-30 19:09:01
【问题描述】:
这是新的默认 DatePickerDialog 小部件从 Android 5.0 开始的样子:
我的项目经理不太喜欢这个。他们想要的是 Marshmallow & Lollipop 之前的“旧式” Holo 日期选择器。像这样的:
我有两个选择:
- 使用由其他人开发的现有日历小部件,具有与上述相同的外观和感觉。
- 创建我自己的具有完整日历功能的日历小部件。
如果我要创建自己的小部件,那么创建 UI 就足够简单了。我的问题是,如何为这样的日历编写业务逻辑,即如何用真实数据支持它?如何计算闰年以及不同月份的天数? 最重要的是,我需要三个 NumberPickers 在最小和最大范围方面保持同步。应该不可以滚动超出最小和最大限制。这是我一直没能解决的问题。
这是我到目前为止所做的:
- 我用过
NumberPicker里面的小部件DialogFragment, 我用过setMinValue()和setMaxValue()设置每个NumberPicker的范围。 -
当一年发生变化时(比如从 2011 年到 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