Android CalendarView:无法设置最小日期和所选日期

时间:2015-03-08 18:28:55

标签: android date

我知道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会显示:

  • 3月7日,作为第一个可选日期;
  • 3月15日,作为选定日期。

方法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我决定选择的日期是什么?

干杯

1 个答案:

答案 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。