这是新的默认DatePickerDialog
小部件从Android 5.0开始显示的内容:
我的项目经理不太喜欢这个。他们想要的是"旧式" Holo日期采集器,曾经是Marshmallow&棒糖。像这样:
我面前有两个选择:
如果我要创建自己的小部件,那么创建UI非常简单。我的问题是,我如何为这样的日历编写业务逻辑,即如何用真实数据来支持它?我如何计算闰年和不同月份的天数? 最重要的是,我需要三个 NumberPicker
s 在最小和最大范围内保持同步。它应该不可以滚动超出最小和最大限制。这是我无法解决的问题。
这是我到目前为止所做的事情:
NumberPicker
里面的小部件
DialogFragment
,
而且我已经习惯了
setMinValue()
和
setMaxValue()
设置每个NumberPicker
的范围。当一年发生变化时(例如从2011年到2012年),我计算出数字 使用
在当月的天数 cal = new GregorianCalendar(y, m, d);
daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
如here所述。
setWrapSelectorWheel()
阻止日,月和年的选择器滚动超出其最小值和最大值。所以我的问题是,是否有一个预先存在的小部件,例如我可以使用的这个小部件?或者,有没有办法用真实的日历数据支持NumberPicker
,并让它们在最小和最大日期范围内同步滚动?请指导我。所有答案将不胜感激。
修改
虽然给定的答案有效,但值得注意的是,还有一种更好的方法:将DatePicker
包裹在DialogFragment
中。
答案 0 :(得分:1)
您可以使用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