Android 날짜 선택기에서 과거 날짜를 비활성화하려면 어떻게해야합니까?
내 DatePicker를 생성하는 코드는 다음과 같습니다.
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
// set date picker as current date
return new DatePickerDialog(this, datePickerListener, year, month,
day);
}
return null;
}
private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int selectedYear,
int selectedMonth, int selectedDay) {
year = selectedYear;
month = selectedMonth+1;
day = selectedDay;
startdate.setText(new StringBuilder().append(day).append("-")
.append(getMonth(month + 1)).append("-").append(year)
.append(" "));
}
};
답변
넌 할 수있어
datePicker.setMinDate(System.currentTimeMillis() - 1000);
오늘 날짜를 최소 날짜로 설정하고 모든 과거 날짜는 비활성화됩니다.
datePicker
의 목적은 DatePicker
당신의 개체를 사용하는 경우에 DatePickerDialog
할 수있는 당신은
datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
참고 : setMinDate
API 11에서 도입되었습니다.
답변
이 방법은 제대로 작동합니다.
//Get yesterday's date
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
//Set yesterday time milliseconds as date pickers minimum date
DatePickerDialog datePickerDialog = new DatePickerDialog(context, myDateListener, year, month, day);
datePickerDialog.getDatePicker().setMinDate(calendar.getTimeInMillis());
datePickerDialog.show();
답변
이것이 내가하는 방법입니다.
public class DatePickerFragment extends DialogFragment {
OnDateSetListener ondateSet;
Calendar c;
int year = 0, month = 0, day = 0;
public DatePickerFragment() {
}
public void setCallBack(OnDateSetListener ondate) {
ondateSet = ondate;
}
public static DatePickerFragment newInstance(Bundle bundle) {
DatePickerFragment myFragment = new DatePickerFragment();
myFragment.setArguments(bundle);
return myFragment;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// final Calendar c = Calendar.getInstance();
//if else for null arguments
if (getArguments() != null) {
year = getArguments().getInt("year");
month = getArguments().getInt("month");
day = getArguments().getInt("day");
c = Calendar.getInstance();
c.set(year, month, day);
} else {
c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
Log.d("else", "else");
}
DatePickerDialog picker = new DatePickerDialog(getActivity(),
ondateSet, year, month, day);
picker.getDatePicker().setMinDate(c.getTime().getTime());
Log.d("picker timestamp", c.getTime().getTime() + "");
return picker;
}
}
다음은 선택기를 인스턴스화하는 방법입니다.
Bundle bundle = new Bundle();
Calendar c = Calendar.getInstance();
bundle.putInt("year", c.get(Calendar.YEAR));
bundle.putInt("month", c.get(Calendar.MONTH));
bundle.putInt("day", c.get(Calendar.DAY_OF_MONTH));
DatePickerFragment fragment = DatePickerFragment
.newInstance(bundle);
fragment.setCallBack(dateSet);
fragment.show(getActivity().getSupportFragmentManager(), null);
이것은 내 구현입니다. 자유롭게 변경할 수 있습니다. 이 코드는 기본적으로 mindate를 currnet date로 설정합니다. 또한 newInstance가 중요합니다.
답변
재료 구성 요소 라이브러리를 사용 MaterialDatePicker
하여 직접 사용 DateValidator
하거나 DateValidatorPointForward
라이브러리 에서 제공하는 것을 사용할 수 있습니다 .
다음과 같은 것 :
MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();
CalendarConstraints.DateValidator dateValidator = DateValidatorPointForward.now();
//if you need a custom date just use
//CalendarConstraints.DateValidator dateValidator = DateValidatorPointForward.from(yourDate);
constraintsBuilder.setValidator(dateValidator);
builder.setCalendarConstraints(constraintsBuilder.build());
MaterialDatePicker<Long> picker = builder.build();
picker.show(getSupportFragmentManager(), picker.toString());
답변
이 줄을 코드에 사용할 수 있습니다.
private Calendar cal;
private int day;
private int month;
private int year;
static final int DATE_PICKER_ID = 1111;
TextView textView;
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cal = Calendar.getInstance();
day = cal.get(Calendar.DAY_OF_MONTH);
month = cal.get(Calendar.MONTH);
year = cal.get(Calendar.YEAR);
showDialog(DATE_PICKER_ID);
}
});
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_PICKER_ID:
// create a new DatePickerDialog with values you want to show
DatePickerDialog datePickerDialog = new DatePickerDialog(this, datePickerListener, year, month, day);
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, 0); // Add 0 days to Calendar
Date newDate = calendar.getTime();
datePickerDialog.getDatePicker().setMinDate(newDate.getTime()-(newDate.getTime()%(24*60*60*1000)));
return datePickerDialog;
}
return null;
}
private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
// the callback received when the user "sets" the Date in the
// DatePickerDialog
public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
textViewTime.setText(selectedDay + "/" + (selectedMonth + 1) + "/" + selectedYear);
}
};
답변
Calendar c = Calendar.getInstance();
DatePickerDialog dialog = new DatePickerDialog(context, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
String _year = String.valueOf(year);
String _month = (month+1) < 10 ? "0" + (month+1) : String.valueOf(month+1);
String _date = dayOfMonth < 10 ? "0" + dayOfMonth : String.valueOf(dayOfMonth);
String _pickedDate = year + "-" + _month + "-" + _date;
Log.e("PickedDate: ", "Date: " + _pickedDate); //2019-02-12
}
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.MONTH));
dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
dialog.show();
답변
좋아, 그래서 MaterialDatePicker Library를 사용하고 있으며 최소 날짜를 설정하기에는 너무 간단합니다.
DatePickerDialog mDatePickerDialog = DatePickerDialog.newInstance(listener,
mTime.year, mTime.month, mTime.monthDay);
mDatePickerDialog.setYearRange(2016, 2036);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis() - 1000);
mDatePickerDialog.setMinDate(c);