Как установить максимальную дату в диалоговом окне datepicker в android?
в моем приложении я использую выбор даты для установки даты.я хочу установить максимальную дату выбора даты, как сегодня дата в соответствии с системной датой.я не знаю, как установить максимальную дату выбора даты как сегодняшнюю дату.Может кто-нибудь знает, помогите мне решить эту проблему.
моя дата кодирования комплектовщик является:
private int pYear;
private int pMonth;
private int pDay;
static final int DATE_DIALOG_ID = 0;
final Calendar c = Calendar.getInstance();
pYear = c.get(Calendar.YEAR);
pMonth = c.get(Calendar.MONTH);
pDay = c.get(Calendar.DAY_OF_MONTH);
// Date picker
public Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
DatePickerDialog.OnDateSetListener pDateSetListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
pYear = year;
pMonth = monthOfYear;
pDay = dayOfMonth;
e_dob.setText(new StringBuilder()
// to set date in editext
.append(pDay).append("/").append(pMonth + 1)
.append("/").append(pYear).append(" "));
}
};
return new DatePickerDialog(this, pDateSetListener, pYear, pMonth,
pDay);
}
return null;
}
11 ответов:
использовать
setMaxDate()
.например, заменить
return new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay)
заявление с чем-то вроде этого:DatePickerDialog dialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay); dialog.getDatePicker().setMaxDate(new Date().getTime()); return dialog;
получить сегодняшнюю дату (и время) и применять их в качестве максимальной даты.
Calendar c = Calendar.getInstance(); c.set(2017, 0, 1);//Year,Mounth -1,Day your_date_picker.setMaxDate(c.getTimeInMillis());
также мы можем сделать это (проверьте это Stackoverflow ответ для системы.currentTimeMillis () vs Calendar method)
long now = System.currentTimeMillis() - 1000; dp_time.setMinDate(now); dp_time.setMaxDate(now+(1000*60*60*24*7)); //After 7 Days from Now
можно попробовать заменить эту строку:
return new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay);
те:
DatePickerDialog dpDialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay); DatePicker datePicker = dpDialog.getDatePicker(); Calendar calendar = Calendar.getInstance();//get the current day datePicker.setMaxDate(calendar.getTimeInMillis());//set the current day as the max date return dpDialog;
private int pYear; private int pMonth; private int pDay; static final int DATE_DIALOG_ID = 0; /**inside oncreate */ final Calendar c = Calendar.getInstance(); pYear= c.get(Calendar.YEAR); pMonth = c.get(Calendar.MONTH); pDay = c.get(Calendar.DAY_OF_MONTH); @Override protected Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: return new DatePickerDialog(this, mDateSetListener, pYear, pMonth-1, pDay); } return null; } protected void onPrepareDialog(int id, Dialog dialog) { switch (id) { case DATE_DIALOG_ID: ((DatePickerDialog) dialog).updateDate(pYear, pMonth-1, pDay); break; } } private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // write your code here to get the selected Date } };
попробуйте это должно сработать. Спасибо
Попробуй Такое
Я пробовал слишком много решений, но ни один из них не работал,потратив впустую полдня, наконец, я принял решение.
этот код просто покажет вам DatePickerDialog с минимальной и максимальной датой, месяцем и годом,все, что вы хотите просто изменить его.
final Calendar calendar = Calendar.getInstance(); DatePickerDialog dialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker arg0, int year, int month, int day_of_month) { calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, (month+1)); calendar.set(Calendar.DAY_OF_MONTH, day_of_month); String myFormat = "dd/MM/yyyy"; SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.getDefault()); your_edittext.setText(sdf.format(calendar.getTime())); } },calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); dialog.getDatePicker().setMinDate(calendar.getTimeInMillis());// TODO: used to hide previous date,month and year calendar.add(Calendar.YEAR, 0); dialog.getDatePicker().setMaxDate(calendar.getTimeInMillis());// TODO: used to hide future date,month and year dialog.show();
выход:- Отключить предыдущий и будущий календарь
проверьте мой пользовательский datepickerdialog
https://github.com/Redman1037/EightFoldsDatePickerDialog
import android.app.DatePickerDialog; import android.content.Context; import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; /** * Created by Manohar on 14/08/2017. */ public class EightFoldsDatePickerDialog extends DatePickerDialog { private DatePickerDialog datePickerDialog; private SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy"); @RequiresApi(api = Build.VERSION_CODES.N) public EightFoldsDatePickerDialog(@NonNull Context context) { super(context); datePickerDialog = new DatePickerDialog(context); } @RequiresApi(api = Build.VERSION_CODES.N) public EightFoldsDatePickerDialog(@NonNull Context context, int themeResId) { super(context, themeResId); datePickerDialog = new DatePickerDialog(context, themeResId); } public EightFoldsDatePickerDialog(@NonNull Context context, @Nullable OnDateSetListener listener, int year, int month, int dayOfMonth) { super(context, listener, year, month, dayOfMonth); datePickerDialog = new DatePickerDialog(context, listener, year, month, dayOfMonth); } public EightFoldsDatePickerDialog(@NonNull Context context, int themeResId, @Nullable OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth) { super(context, themeResId, listener, year, monthOfYear, dayOfMonth); datePickerDialog = new DatePickerDialog(context, themeResId, listener, year, monthOfYear, dayOfMonth); } public void show() { datePickerDialog.show(); } public void setMinDate(int year, int month, int day) { String minDate = "" + day + "-" + getmonth(month) + "-" + year; try { datePickerDialog.getDatePicker().setMinDate(dateFormat.parse(minDate).getTime()); } catch (ParseException e) { e.printStackTrace(); } } public void setMaxDate(int year, int month, int day) { String maxDate = "" + day + "-" + getmonth(month) + "-" + year; try { datePickerDialog.getDatePicker().setMaxDate(dateFormat.parse(maxDate).getTime()); } catch (ParseException e) { e.printStackTrace(); } } public void setTodayAsMaxDate() { datePickerDialog.getDatePicker().setMaxDate(Calendar.getInstance().getTime().getTime()); } public void setTodayAsMinDate() { datePickerDialog.getDatePicker().setMinDate(Calendar.getInstance().getTime().getTime()); } private String getmonth(int month) { switch (month) { case 1: return "January"; case 2: return "February"; case 3: return "March"; case 4: return "April"; case 5: return "May"; case 6: return "June"; case 7: return "July"; case 8: return "August"; case 9: return "September"; case 10: return "October"; case 11: return "November"; case 12: return "December"; } return "January"; } }
использование
Копировать EightFoldsDatePickerDialog.Java для вашего проекта
EightFoldsDatePickerDialog datePickerDialog=new EightFoldsDatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { //Do something with date Toast.makeText(this, "Year "+year+" month "+month+" day "+dayOfMonth, Toast.LENGTH_SHORT).show(); } },year,month,day); // give any year , month , day values, this will be opened by default in dialog datePickerDialog.setMinDate(2017,8,7); //arguments are year , month , date (use for setting custom min date) datePickerDialog.setMaxDate(2017,8,25); //arguments are year , month , date (use for setting custom max date) // datePickerDialog.setTodayAsMinDate(); // sets today's date as min date // datePickerDialog.setTodayAsMaxDate(); // sets today's date as max date datePickerDialog.show();
результат
используйте этот код прямо в методе Main надеюсь, что это поможет вам...
@RequiresApi(api = Build.VERSION_CODES.N) public DatePickerDialog datePickerDialog_db() { DatePickerDialog pickerDialog = new DatePickerDialog(getApplicationContext(),your view, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)); pickerDialog.getDatePicker().setMaxDate(Calendar.getInstance().getTimeInMillis()); pickerDialog.show(); return null; }
Вы можете создать пользовательский выбор даты, то есть работа для всех уровней api.
public class CustomDatePickerDialog extends DatePickerDialog { int maxYear; int maxMonth; int maxDay; public CustomDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { super(context, callBack, year, monthOfYear, dayOfMonth); } public void setMaxDate(long maxDate) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getDatePicker().setMaxDate(System.currentTimeMillis()); } else { final Calendar c = Calendar.getInstance(); c.setTimeInMillis(maxDate); maxYear = c.get(Calendar.YEAR); maxMonth = c.get(Calendar.MONTH); maxDay = c.get(Calendar.DAY_OF_MONTH); } } @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { super.onDateChanged(view, year, monthOfYear, dayOfMonth); } else { if (year > maxYear) view.updateDate(maxYear, maxMonth, maxDay); if (monthOfYear > maxMonth && year == maxYear) view.updateDate(maxYear, maxMonth, maxDay); if (dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth) view.updateDate(maxYear, maxMonth, maxDay); } }
установить максимальную дату
final CustomDatePickerDialog pickerDialog = new CustomDatePickerDialog(getActivity(), myDateListener, year, month, day); pickerDialog.setMaxDate(System.currentTimeMillis()); pickerDialog.show();
Я решил это, следуя
final Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day); datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
надеюсь, что это поможет вам
private void selectDOB () {
final Calendar calendar = Calendar.getInstance(); mYear = calendar.get(Calendar.YEAR); mDay = calendar.get(Calendar.DATE); mMonth = calendar.get(Calendar.MONTH); DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @SuppressLint("LongLogTag") @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { strDateOfBirth = (month + 1) + "-" + dayOfMonth + "-" + year; //********************** check and set date with append 0 at starting*************************** if (dayOfMonth < 10) { strNewDay = "0" + dayOfMonth; } else { strNewDay = dayOfMonth + ""; } if (month + 1 < 10) { strNewMonth = "0" + (month + 1); } else { strNewMonth = (month + 1) + ""; } Log.e("strnewDay *****************", strNewDay + ""); Log.e("strNewMonth *****************", strNewMonth + ""); // etDateOfBirth.setText(dayOfMonth + " / " + (month + 1) + " / " + year); etDateOfBirth.setText(strNewDay + " / " + strNewMonth + " / " + year); Log.e("strDateOfBirth *******************", strDateOfBirth + ""); } }, mYear, mMonth, mDay); datePickerDialog.show(); //*************** input date of birth must be greater than or equal to 18 ************************************ Calendar maxDate = Calendar.getInstance(); maxDate.set(Calendar.DAY_OF_MONTH, mDay); maxDate.set(Calendar.MONTH, mMonth); maxDate.set(Calendar.YEAR, mYear - 18); datePickerDialog.getDatePicker().setMaxDate(maxDate.getTimeInMillis()); //*************** input date of birth must be less than today date ************************************ // datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis()); }