我已在我的应用中实施了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();
}
我无法选择上周的日期,也无法按下一个月的下一个日期。
有没有人遇到这样的问题?有没有人有解决方案?
感谢任何帮助,谢谢。
答案 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