这是新的默认DatePickerDialog
小部件从 Android 5.0 开始看起来像:
我的项目经理不太喜欢这个。他们想要的是 Marshmallow & Lollipop 之前的“旧式”Holo 日期选择器。像这样:
我有两个选择:
- 使用其他人开发的具有与上述相同外观和风格的现有日历小部件。
- 创建我自己的具有完整日历功能的日历小部件。
如果我要创建自己的小部件,那么创建 UI 就足够简单了。我的问题是,如何为这样的日历编写业务逻辑,即如何用真实数据支持它?如何计算闰年和不同月份的天数? 最重要的是,我需要三个 NumberPicker
在涉及最小和最大范围时保持同步。它应该不 可以滚动到最小和最大限制之外。这是我一直没能解决的问题。
这是我到目前为止所做的:
- 我用过
NumberPicker
里面的小部件DialogFragment
, 我用过setMinValue()
和setMaxValue()
设置每个NumberPicker
的范围。 当年份发生变化时(比如从 2011 年到 2012 年),我会计算数字 当月的天数,使用
cal = new GregorianCalendar(y, m, d); daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
描述here .
- 当用户从十二月滚动到一月或一月滚动到十二月时, 我以编程方式滚动年份选择器以增加或 按照说明分别递减 here .
- 使用
setWrapSelectorWheel()
可以防止日、月和年的选择器滚动到它们的最小值和最大值之外。 .
所以我的问题是,是否有一个我可以使用的预先存在的小部件,例如这个小部件?或者,有没有办法用真实的日历数据支持 NumberPicker
,并让它们在最小和最大日期范围内同步滚动?请指导我。所有答案将不胜感激。
编辑:
虽然给定的答案有效,但值得注意的是还有更好的方法:包装 DatePicker
在 DialogFragment
中。
最佳答案
您可以使用 API 日期选择器并使用此构造函数告诉它使用 Holo Design:DatePickerDialog (Context, int, DatePickerDialog.OnDateSetListener, int, int, int)
查看关于这个问题的评论:DatePicker crash in samsung with android 5.0
您可能需要稍微调整一下主题。
以下是我们如何实际使用它:https://github.com/dmfs/opentasks/blob/master/src/org/dmfs/tasks/widget/TimeFieldEditor.java#L437
关于java - Android 自定义日历/日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34672358/