I'm new to android How to do disable future date in date picker, I tried many codes in stack over flow but it couldn't help.can anybody help me pleas.
Have a look Code
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.daty);
click=(ImageView)findViewById(R.id.click);
hdate=(TextView)findViewById(R.id.hdate);
timeStamp = new SimpleDateFormat("dd/MM/yyyy").format(new Date(System.currentTimeMillis()));
hdate.setText(timeStamp);
final Calendar myCalendar = Calendar.getInstance();
// listener for date picker
final DatePickerDialog.OnDateSetListener 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);
updateLabel();
}
private void updateLabel() {
// TODO Auto-generated method stub
String myFormat = "dd/MM/yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
hdate.setText(sdf.format(myCalendar.getTime()));
}
};
//texview listener
hdate.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
new DatePickerDialog(Daty.this, date, myCalendar
.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
You can simply use setMaxDate
function for the date picker.
DatePickerDialog datePickerDialog = new DatePickerDialog(getApplicationContext(), date, Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH); //date is dateSetListener as per your code in question
datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
Refer documentation
Hope this helps.
I use this code in my project:
Calendar calendar = Calendar.getInstance();
calendar.set(year,monthOfYear,dayOfMonth);
long selectedTimeInMillis = calendar.getTimeInMillis();
long systemTimeInMillis = Calendar.getInstance().getTimeInMillis();
if(selectedTimeInMillis<=systemTimeInMillis){
setDate(year,monthOfYear,dayOfMonth);
}else{
Toast.makeText(getContext(),"Cannot select future date",Toast.LENGTH_SHORT).show();
}
mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());
ed_date.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Calendar mcurrentDate=Calendar.getInstance();
year=mcurrentDate.get(Calendar.YEAR);
month=mcurrentDate.get(Calendar.MONTH);
day=mcurrentDate.get(Calendar.DAY_OF_MONTH);
final DatePickerDialog mDatePicker =new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener()
{
@Override
public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday)
{
ed_date.setText(new StringBuilder().append(year).append("-").append(month+1).append("-").append(day));
int month_k=selectedmonth+1;
}
},year, month, day);
mDatePicker.setTitle("Please select date");
// TODO Hide Future Date Here
mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());
// TODO Hide Past Date Here
// mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis());
mDatePicker.show();
}
});
Its Working
Use this :
public class MainActivity extends Activity {
private TextView tvDisplayDate;
private DatePicker dpResult;
private int mYear;
private int mMonth;
private int mDay;
static final int DATE_DIALOG_ID = 1;
//these variables are used to set max years need to set on Date Picker dialog...
int minYear1 = 2000;
int minMonth1 = 0;//0-january , 1-february , 2-march..
int minDay1 =1;
int minYear = minYear1;
int minMonth = minMonth1;
int minDay = minDay1;
//these are the minimum dates to set Datepicker..
private int year;
private int month;
private int day;
public String dateOutput=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
setCurrentDateOnView();
Button pickDate = (Button) findViewById(R.id.btnChangeDate);
pickDate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(DATE_DIALOG_ID);
}
});
}
// display current date
public void setCurrentDateOnView() {
System.out.println("----------setCurrentDateOnView()-----------");
tvDisplayDate = (TextView) findViewById(R.id.tvDate);
dpResult = (DatePicker) findViewById(R.id.dpResult);
final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
// set current date into textview
tvDisplayDate.setText(new StringBuilder()
// Month is 0 based, just add 1
.append(month + 1).append("-").append(day).append("-")
.append(year).append(" "));
// set current date into datepicker
dpResult.init(year, month, day, null);
}
//this was the main part in program to Restrict the DatePicker Dialog to only its current date.
@Override
protected Dialog onCreateDialog(int id) {
System.out.println("----------onCreateDialog()-----------");
DatePickerDialog _date = null;
switch (id) {
case DATE_DIALOG_ID:
_date = new DatePickerDialog(this, datePickerListener,
year, mMonth, mDay){
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
System.out.println("----------onDateChanged()-----------"+mYear+"--"+year);
System.out.println("----------onDateChanged()-----------"+mMonth+"--"+monthOfYear);
System.out.println("----------onDateChanged()-----------"+mDay+"--"+dayOfMonth);
// These lines of commented code used for only setting the maximum date on Date Picker..
if (year > mYear && year)
view.updateDate(mYear, mMonth, mDay);
if (monthOfYear > mMonth && year == mYear )
view.updateDate(mYear, mMonth, mDay);
if (dayOfMonth > mDay && year == mYear && monthOfYear == mMonth)
view.updateDate(mYear, mMonth, mDay);
/* //these below lines of code used for setting the maximum as well as minimum dates on Date Picker Dialog..
if (year < minYear)
view.updateDate(minYear, minMonth, minDay);
if (monthOfYear < minMonth && year == minYear )
view.updateDate(minYear, minMonth, minDay );
if (dayOfMonth < minDay && year == minYear && monthOfYear == minMonth)
view.updateDate(minYear, minMonth, minDay);
if (year > mYear)
view.updateDate(mYear, mMonth, mDay);
if (monthOfYear > mMonth && year == mYear)
view.updateDate(mYear, mMonth, mDay);
if (dayOfMonth > mDay && year == mYear && monthOfYear == mMonth)
view.updateDate(mYear, mMonth, mDay);
*/
dateOutput = String.format("Date Selected: %02d/%02d/%04d",
dayOfMonth, monthOfYear+1, year);
// Log.d("Debug", dateOutput);
Toast.makeText(MainActivity.this,dateOutput, Toast.LENGTH_SHORT).show();
}
};
}
return _date;
}
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) {
System.out.println("----------onDateSet()-----------");
year = selectedYear;
month = selectedMonth;
day = selectedDay;
// set selected date into textview
tvDisplayDate.setText(new StringBuilder().append(month + 1).append("-").append(day).append("-").append(year).append(" "));
// set selected date into datepicker also
dpResult.init(year, month, day, null);
}
};
}
来源:https://stackoverflow.com/questions/26229816/how-to-disable-future-date-picker-in-android