33

我正在编写我的第一个应用程序,我有一个关于DatePicker.

我的应用程序要求用户输入日期。最用户友好的方式是弹出一个类似日历的小部件,该小部件像日历网格一样显示当前月份 - 如下所示:

在此处输入图像描述

我想用它来代替DatePicker界面——它有月、日和年字段,每个字段都有一个向上和向下按钮来增加/减少。

这种类型的功能是否内置在任何 Android 小部件或视图中,还是我必须设计自己的自定义组件才能做到这一点?我想这已经存在了,看看这种类型的 UI 在非移动应用程序和网页中如此频繁地使用。

谢谢!

4

8 回答 8

19

现在,在 2014 年,甚至原生DatePicker(链接)包含小 Holo 寻找CalendarView(链接)以在一个月中选择一天。

您可以通过设置选择是否同时显示两个微调器CalendarView或仅显示其中一个:

  • android:calendarViewShown
  • android:spinnersShown

我不确定它是否只是 API 级别 16+,或者是否甚至在冰淇淋三明治中,但它就在那里。这是默认情况下的外观:

在此处输入图像描述


此外,在 API 级别 21 及更高级别上,有一个新的 Material 主题DatePicker,如下所示:

在此处输入图像描述

这是 API 21+ 的默认设置,不再有微调器,但您可以通过设置切换回 Holo

android:datePickerMode="spinner"

在您的 XML 中。

于 2014-03-05T19:39:20.980 回答
12

由于 API 11 有原生:CalendarView

在此处输入图像描述

自 API 7 起,此视图就在HoloEverywhere中。

于 2012-07-30T14:26:32.297 回答
11

这种类型的功能是否内置在任何 android 小部件或视图中,还是我必须设计自己的自定义 > 组件才能做到这一点?

抱歉,Android SDK 中没有相应的组件。您说明的小部件对于触摸屏来说太小了。您可以实现更大的东西(请参阅日历应用程序),但您在很大程度上要靠自己。

于 2010-09-14T22:22:15.980 回答
7

到目前为止我发现了什么:

于 2011-03-26T12:02:38.960 回答
4

我最近把它写成一个模块化的应用程序。这是一些示例代码、带有屏幕截图的文档.apk 下载

于 2010-12-10T06:49:08.747 回答
4

在http://caughtinthemobileweb.wordpress.com/2011/06/20/how-to-implement-calendarview-in-android/中找到了一个很好的实现


此外,自 API 级别 11(Android 3.0)以来,CalendarView 已经有了本地实现http://developer.android.com/reference/android/widget/CalendarView.html

于 2012-05-31T08:45:22.057 回答
2

尝试使用这个组件: https ://github.com/truefedex/android-date-picker 在此处输入图像描述

如果您想像弹出窗口一样使用它,请在 onclick 上写入:

if (calendarPopup == null) {
  calendarPopup = new PopupWindow(getContext());
  CalendarPickerView calendarView = new CalendarPickerView(getContext());
  CalendarNumbersView calendar = (CalendarNumbersView) calendarView.findViewById(com.phlox.datepick.R.id.calendar);
  calendar.setShowDayNames(false);
  calendarView.setListener(onDateSelectionListener);
  calendarPopup.setContentView(calendarView);
  calendarPopup.setWindowLayoutMode(
        MeasureSpec.makeMeasureSpec(llCalendar.getWidth(), MeasureSpec.EXACTLY),
        ViewGroup.LayoutParams.WRAP_CONTENT);
  calendarPopup.setHeight(1);
  calendarPopup.setWidth(llCalendar.getWidth());
  calendarPopup.setOutsideTouchable(true);
}
calendarPopup.showAsDropDown(llCalendar);
于 2015-09-06T22:49:18.890 回答
0

您可以使用此库进行日期选择

https://github.com/square/android-times-square/

于 2016-02-17T09:17:43.747 回答