setmindate - max date today datepicker android
Establecer límite en DatePickerDialog en Android? (7)
Aquí está el código de trabajo, tienes que hacer algunos cambios de acuerdo con tu código. Al igual que puede agregar la edad mínima y máxima para niños y bebés.
private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
/*
* mYear = year;
* mMonth = monthOfYear;
* mDay = dayOfMonth;
*/
if (year > maxYear || monthOfYear > maxMonth && year == maxYear ||
dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth) {
view.updateDate(maxYear, maxMonth, maxDay);
//you can add toast message here for max year selection
} else if (year < minYear || monthOfYear < minMonth && year == minYear ||
dayOfMonth < minDay && year == minYear && monthOfYear == minMonth) {
view.updateDate(minYear, minMonth, minDay);
//you can add toast message here for min year selection
} else {
view.updateDate(year, monthOfYear, dayOfMonth);
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mPickDate = (Button) findViewById(R.id.pickDate);
mPickDate.setOnClickListener(this);
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
maxYear = mYear - 2;//make a proper condition to change it the based on the child/infant
maxMonth = mMonth;
maxDay = mDay;
minYear = mYear - 12;//make a proper condition to change it the based on the child/infant
minMonth = mMonth;
minDay = mDay;
}
@Override
public void onClick(View v) {
showDialog(DATE_DIALOG_ID);
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, mYear - minYear,
mMonth, mDay);
}
return null;
}
¿Cómo limitar el DatePickerDialog para elegir una fecha de 2 a 12 años en el pasado o de 0 a 2 años a partir de la fecha actual?
Tengo DatePickerDialog en la actividad que se utiliza para obtener la fecha de nacimiento para niños y bebés. La edad del niño será (2-12 años) y la edad del bebé puede ser (0-2 años). Si supero 1, entonces el límite de edad debería ser (2-12 años) y si supero 2, el límite de edad debería ser (0-2 años).
¿Qué podría hacer para obtener esta funcionalidad en mi calendario?
Mi código de calendario es:
date = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
myCalendar.set(Calendar.YEAR, year);
myCalendar.set(Calendar.MONTH, monthOfYear);
myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
String myFormat = "dd/MM/yy"; //In which you need put here
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
dateofBirth.setText(sdf.format(myCalendar.getTime()));
}
};
dateofBirth.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showDialog(DATE_DIALOG_ID);
}
});
public Dialog onCreateDialog(int id) {
final Calendar now = Calendar.getInstance();
switch (id) {
case DATE_DIALOG_ID:
// set date picker as current date
DatePickerDialog _date = new DatePickerDialog(this, date,myCalendar
.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)){
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth){
if (year > now.get(Calendar.YEAR))
view.updateDate(myCalendar
.get(Calendar.YEAR), myCalendar
.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));
if (monthOfYear > now.get(Calendar.MONTH) && year == now.get(Calendar.YEAR))
view.updateDate(myCalendar
.get(Calendar.YEAR), myCalendar
.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));
if (dayOfMonth > now.get(Calendar.DAY_OF_MONTH) && year == now.get(Calendar.YEAR) &&
monthOfYear == now.get(Calendar.MONTH))
view.updateDate(myCalendar
.get(Calendar.YEAR), myCalendar
.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));
}
};
return _date;
}
return null;
}
Establecer el mínimo y la fecha máxima para DatePickerDialog no es suficiente. El usuario puede hacer clic en el año y desplazarse entre los años.
También debe establecer el rango de año en el DatePicker de esta manera:
datePicker.setYearRange(calendar.get(Calendar.YEAR), calendar.get(Calendar.YEAR) + 1);
No estoy en posición de darte el código de trabajo, ya que estoy de gira y no tuve acceso a mi PC. pero puedo darte una manera de lograr tu objetivo (o eso creo).
No estoy seguro de que esto funcione a la perfección, pero vale la pena intentarlo.
Por favor, prueba este código e infórmame.
"DatepickerType" es una variable de Miembro pública Integer de la clase.
private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
// when dialog box is closed, below method will be called.
public void onDateSet(DatePicker view, int selectedYear,
int selectedMonth, int selectedDay) {
int y = Calendar.getInstance().get(Calendar.YEAR);
switch(DatepickerType){
case 1:
if(selectedYear>(y-2)){
//Add message if you want
selectedYear = y-2;
}
else if(selectedYear<(y-12)) {
//Add msg if u want
selectedYear = y-12;
}
case 2:
if(selectedYear>(y)){
//Add message if you want
selectedYear = y;
}
else if(selectedYear<(y-2)) {
//Add msg if u want
selectedYear = y-2;
}
}
String year1 = String.valueOf(selectedYear);
String month1 = String.valueOf(selectedMonth+1);
String day1 = String.valueOf(selectedDay);
//do what you need
setLastStatus();
}
};
Que esto te ayude Es mejor utilizar el fragmento de diálogo ya que showDialog()
de Dialog está en desuso. También tenga en cuenta que solo funcionará en API superior a 11. Por lo tanto, cambie min.sdk
en el manifiesto a 11.
Calendar calendar=Calendar.getInstance();
int mDay = calendar.get(Calendar.DAY_OF_MONTH), mMonth = calendar.get(Calendar.MONTH), mYear = calendar.get(Calendar.YEAR);
int minDay = calendar.get(Calendar.DAY_OF_MONTH), minMonth = calendar.get(Calendar.MONTH), minYear = calendar.get(Calendar.YEAR)-12;
int maxDay = calendar.get(Calendar.DAY_OF_MONTH), maxMonth = calendar.get(Calendar.MONTH), maxYear = calendar.get(Calendar.YEAR)-12;
public void onDate(View view) {
System.out.println("hello");
DialogFragment fragment = new SelectDateFragment();
fragment.show(getFragmentManager(), "Date Picker");
}
class SelectDateFragment extends DialogFragment implements
DatePickerDialog.OnDateSetListener {
public Dialog onCreateDialog(Bundle savedInstanceState) {
System.out.println("entrering on create dialog");;
return new DatePickerDialog(getActivity(), this, mYear, mMonth,
mDay) {
public void onDateChanged(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
System.out.println("----------onDateChanged()-----------"
+ year + "--" + year);
System.out.println("----------onDateChanged()-----------"
+ monthOfYear + "--" + monthOfYear);
System.out.println("----------onDateChanged()-----------"
+ dayOfMonth + "--" + dayOfMonth);
if ((minYear < year)
|| ((minMonth < monthOfYear) && (minYear == year))
|| ((minDay < dayOfMonth) && (minYear == year) && (minMonth == monthOfYear))) {
view.updateDate(minYear, minMonth - 1, minDay);
}
if ((maxYear > year)
|| ((maxMonth > monthOfYear) && (maxYear == year))
|| ((maxDay > dayOfMonth) && (maxYear == year) && (maxMonth == monthOfYear))) {
view.updateDate(maxYear, maxMonth - 1, maxDay);
}
}
};
}
@Override
public void onDateSet(android.widget.DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
System.out.println("year=" + year + "day=" + dayOfMonth + "month="
+ monthOfYear);
mYear=year;
mMonth=monthOfYear;
mDay=dayOfMonth;
onPopulateSet(year, monthOfYear + 1, dayOfMonth);
}
private void onPopulateSet(int year, int i, int dayOfMonth) {
EditText et_setDate;
et_setDate = (EditText) findViewById(R.id.register_et_dob);
et_setDate.setText(dayOfMonth + "/" + i + "/" + year);
System.out.println("enetring on populate Set");
}
}
Si no desea usar Diálogo personalizado, utilice este código de línea única
datePickerDialog.getDatePicker (). setMinDate (System.currentTimeMillis ());
Todas las otras respuestas parecen complicadas, así que solo voy a decir lo obvio: puede obtener el DatePicker
subyacente de un DatePickerDialog
(simplemente llamando a getDatePicker()
) y establecer sus límites usando:
Donde el argumento es la cantidad habitual de milisegundos desde el 1 de enero de 1970 00:00:00 en la zona horaria predeterminada. De todos modos, tendrá que calcular estos valores, pero eso debería ser trivial con la clase Calendar
: simplemente tome la fecha actual y agregue o resta x
años.
El lector más atento se dará cuenta de que los incubadores antes mencionados no estaban disponibles hasta el nivel 11 de la API. Si se dirige solo a esa (o más nueva) plataforma, entonces está listo. Si también quieres soportar, es decir, dispositivos Gingerbread (Android 2.3 / API nivel 9+), puedes usar una versión backported de DatePicker
en lugar de DatePicker
.
datePickerDialog = new CustomDatePickerDialog(this,
new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
// TODO Auto-generated method stub
try {
Log.i("DAta SEt", "data set");
} catch (Exception e) {
}
}
}, minYear, minMonth, minDay, maxYear, maxMonth, maxDay);
CustomDatePickerDialog:
public class CustomDatePickerDialog extends DatePickerDialog {
private boolean mIgnoreEvent = false, mignorsunday = true;
public static int mYear, mMonth, mDate, maxYear, maxMonth, maxDay, minYear,
minMonth, minDay;
public static int dateflag = 0;
public static int dateflag2 = 0;
public CustomDatePickerDialog(Context context, OnDateSetListener callBack,
int year, int monthOfYear, int dayOfMonth, int maxYear,
int maxMonth, int maxDay) {
super(context, callBack, year, monthOfYear, dayOfMonth);
// TODO Auto-generated constructor stub
dateflag = 0;
dateflag2 = 1;
mYear = year;
mMonth = monthOfYear;
mDate = dayOfMonth;
Log.i("Hello World ::", "Please Its Updating At Every time");
this.maxYear = maxYear;
this.maxMonth = maxMonth;
this.maxDay = maxDay;
this.minYear = year;
this.minMonth = monthOfYear;
this.minDay = dayOfMonth;
// setTitle("בחרו מתי נח לכם שנתקשר");
setTitle("We Call U...בחרו מתי נוח לכם ש");
}
@Override
public void onDateChanged(DatePicker view, int year, int month, int day) {
// TODO Auto-generated method stub
super.onDateChanged(view, year, month, day);
dateflag = 1;
dateflag2 = 1;
if (!mIgnoreEvent) {
mIgnoreEvent = true;
if (year > maxYear || month > maxMonth && year == maxYear
|| day > maxDay && year == maxYear && month == maxMonth) {
mYear = maxYear;
mMonth = maxMonth;
mDate = maxDay;
view.updateDate(maxYear, maxMonth, maxDay);
} else if (year < minYear || month < minMonth && year == minYear
|| day < minDay && year == minYear && month == minMonth) {
mYear = minYear;
mMonth = minMonth;
mDate = minDay;
view.updateDate(minYear, minMonth, minDay);
} else {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DATE, day);
if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
if (mignorsunday) {
cal.add(Calendar.DATE, 1);
mYear = cal.get(Calendar.YEAR);
mMonth = cal.get(Calendar.MONTH);
mDate = cal.get(Calendar.DATE);
mignorsunday = false;
} else if (!mignorsunday) {
mignorsunday = true;
cal.add(Calendar.DATE, -1);
mYear = cal.get(Calendar.YEAR);
mMonth = cal.get(Calendar.MONTH);
mDate = cal.get(Calendar.DATE);
}
} else {
mYear = year;
mMonth = month;
mDate = day;
}
view.updateDate(mYear, mMonth, mDate);
}
setTitle("We Call U...בחרו מתי נוח לכם ש");
mIgnoreEvent = false;
}
}
public int getSelectedYear() {
return mYear;
}
public int getSelectedMonth() {
return mMonth;
}
public int getSelectedDate() {
return mDate;
}
}