DatePickerDialog上周没有显示

时间:2016-04-18 06:28:16

标签: android android-5.0-lollipop android-calendar calendarview

我已在我的应用中实施了DatePickerDialog,而我只有 Lollipop 存在以下问题。

代码段:

void setDate(final EditText ed) {
    Calendar mcurrentTime = Calendar.getInstance();
    int day = mcurrentTime.get(Calendar.DAY_OF_MONTH);
    int month = mcurrentTime.get(Calendar.MONTH);
    int year = mcurrentTime.get(Calendar.YEAR);
    DatePickerDialog mTimePicker;
    mTimePicker = new DatePickerDialog(getContext(), new OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int selectedYear, int monthOfYear, int dayOfMonth) {
            // TODO Auto-generated method stub
            monthOfYear += 1;
            ed.setText(selectedYear + "-" + monthOfYear + "-" + dayOfMonth);
        }
    }, year, month, day);
    //mTimePicker.setTitle("Select Date:");
    mTimePicker.show();
}

我无法选择上周的日期,也无法按下一个月的下一个日期。

有没有人遇到这样的问题?有没有人有解决方案?

感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:1)

我也看到了同样的问题。

它与datepicker上设置的最小或最大日期无关......

这似乎是一个问题,因为屏幕尺寸很小,因此日期选择器会切断一个月的最后一周(如果屏幕非常小,则更多)和“天”区域不可滚动(上/下)向左/向右滚动将带您到上个月/下个月...

我想要修复的想法是让datepicker的'days'区域可以垂直滚动,但由于这是一个默认的android小部件,我不知道如何去做这个-_-

P.S。我知道这不是答案,但我的代表阻止我发表评论,因此这是我唯一的选择......

答案 1 :(得分:0)

您可以将Min and Max date设置为calendar,这是下面的代码段

Calendar calendar = Calendar.getInstance();
                DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(),
                        new DatePickerDialog.OnDateSetListener() {
                            @Override
                            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                                Calendar calendar1 = Calendar.getInstance();
                                calendar1.set(year, monthOfYear, dayOfMonth);
                                Date date = new Date(calendar1.getTimeInMillis());
                                if (date.after(new Date(Calendar.getInstance().getTimeInMillis()))) {
                                    Toast.makeText(ProfileFirstFragment.this.getActivity(),
                                            getString(R.string.error_wrong_date_selected), Toast.LENGTH_SHORT).show();
                                    return;
                                }

                                dob.setText(getString(R.string.date_slash, new String[]{String.valueOf(dayOfMonth),
                                        String.valueOf(monthOfYear + 1), String.valueOf(year)}));
                            }
                        },
                        1990, 0, 1); //this can be your calendar startdate when you open the calendar
                calendar.set(Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.MONTH),
                        Calendar.getInstance().get(Calendar.DAY_OF_MONTH), Calendar.getInstance().getMaximum(Calendar.HOUR_OF_DAY),
                        Calendar.getInstance().getMaximum(Calendar.MINUTE), Calendar.getInstance().getMaximum(Calendar.SECOND));
                datePickerDialog.getDatePicker().setMaxDate(calendar.getTimeInMillis());// this will be your max date you can select
                calendar.add(Calendar.YEAR, -90); 
                datePickerDialog.getDatePicker().setMinDate(calendar.getTimeInMillis());
                datePickerDialog.show();//this will be minimum date in your calendar

我希望这会有所帮助!!

答案 2 :(得分:0)

创建DatePickerDialog实例时,请将所需的最小日期传递给alllow用户。

    new DatePickerDialog(getContext(), new OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int selectedYear, 
                                     int monthOfYear, int dayOfMonth) {
                // TODO
            }
    }, year, month, 1); // for current month's first day as minimum

并在下一行中,show调用方法updateDate

之前
     mDatePicker.updateDate(year,month,day); // for current date to set selected