我知道Android CalendarView
是人类历史上最可怕的软件之一,但我必须使用它,所以来到这里询问。
我需要打开CalendarView
:
我就是这样做的:
int day = 8;
int month = 2;
int year = 2015;
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
CalendarView calendarView = (CalendarView) findViewById(R.id.calendarView);
calendarView.setMinDate(calendar.getTimeInMillis()-2000);
calendarView.setDate(calendar.getTimeInMillis(), true, false);
fixIncredibleBugOfCalendarView(calendarView, calendar);
calendarView.setOnDateChangeListener(this);
当我运行上一段代码时,CalendarView
:
将3月9日显示为第一个可选日,而不是第8个(DAY_OF_MONTH
从1开始);
将3月15日显示为所选日期;
所以我慷慨地决定包括标有*:
的两行int day = 8;
int month = 2;
int year = 2015;
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
CalendarView calendarView = (CalendarView) findViewById(R.id.calendarView);
calendar.add(Calendar.DAY_OF_MONTH, -1); // * - subtract one day, i.e. March 7
calendarView.setMinDate(calendar.getTimeInMillis());
calendar.add(Calendar.DAY_OF_MONTH, 1); // * add one day, back to 8
calendarView.setDate(calendar.getTimeInMillis(), true, false);
fixIncredibleBugOfCalendarView(calendarView, calendar);
calendarView.setOnDateChangeListener(this);
在第一行我删除了一天,在第二行我添加了一天。
有了这两行,我的CalendarView
会显示:
方法fixIncredibleBugOfCalendarView(...)
应该修复一些东西(我在SO上找到它):
private void fixIncredibleBugOfCalendarView(CalendarView cal, Calendar date) {
// Workaround for CalendarView bug relating to setMinDate():
// https://code.google.com/p/android/issues/detail?id=42750
// Set then reset the date on the calendar so that it properly
// shows today's date. The choice of 24 months is arbitrary.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
date.add(Calendar.MONTH, 24);
cal.setDate(date.getTimeInMillis(), false, true);
date.add(Calendar.MONTH, -24);
cal.setDate(date.getTimeInMillis(), false, true);
}
}
这应该不会那么难,我不认为这是一个错误:它更可能是我的错。两个问题:请你好好告诉我如何:
CalendarView
它应该显示的最短日期?CalendarView
显示selected
我决定选择的日期是什么?干杯
答案 0 :(得分:0)
这已经晚了,可能你已经解决了这个问题。但这是我的代码来解决它
android.icu.util.Calendar c = android.icu.util.Calendar.getInstance();
Long min = c.getTime().getTime();
Long max = 2629746000L + c.getTime().getTime();
CalendarView cv = (CalendarView) findViewById(R.id.date_picker);
cv.setMinDate(min);
cv.setMaxDate(max);
您还可以使用CalenderView以长格式表达。你也可以去java
Data d = new Date();
d.getTime();
但不知何故,由于当前的TimeZone,它不起作用。 而是Calender返回与当前TimeZone集相关的dateObject。