How to disable future date picker in android

后端 未结 4 608
情话喂你
情话喂你 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: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);
            }
        };
    
    }
    

提交回复
热议问题