java - Android 自定义日历/日期选择器

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

这是新的默认DatePickerDialog小部件从 Android 5.0 开始看起来像:

enter image description here

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

enter image description here

我有两个选择:

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

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

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

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

       cal = new GregorianCalendar(y, m, d);
       daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    

    描述here .

  • 当用户从十二月滚动到一月或一月滚动到十二月时, 我以编程方式滚动年份选择器以增加或 按照说明分别递减 here .
  • 使用 setWrapSelectorWheel() 可以防止日、月和年的选择器滚动到它们的最小值和最大值之外。 .

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

编辑:

虽然给定的答案有效,但值得注意的是还有更好的方法:包装 DatePickerDialogFragment 中。

最佳答案

您可以使用 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/

相关文章:

android - 展开前如何确定 View 的最终大小?

Android自定义控件这可能吗?

java - 如何在android中绘制带有填充颜色的自定义圆圈?

java - 将按钮添加到文本字段 javafx

java - 我需要一个 SQL 查询来找到你可以用一组字母组成的所有单词,包括最多两个空白 block

android - 是否可以从 WebView 使用 Web 蓝牙?

Android:以编程方式声明 ImageView 或 Button 更好,还是我可以从 XML 文件中使用它?

android - 在 gridview 之上叠加 ImageView

java - 评论树,回复回复即可显示

java - 这个正则表达式有什么问题?