How to disable future date picker in android

后端 未结 4 583
情话喂你
情话喂你 2020-12-22 13:27

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

相关标签:
4条回答
  • 2020-12-22 14:09
     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

    0 讨论(0)
  • 2020-12-22 14:17

    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();
                                }
    
    0 讨论(0)
  • 2020-12-22 14:22

    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.

    0 讨论(0)
  • 2020-12-22 14:25
    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);
            }
        };
    
    }
    
    0 讨论(0)
提交回复
热议问题