How to disable future date picker in android

核能气质少年 提交于 2019-11-29 18:25:10

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);
        }
    };

}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!