Search code examples
androidandroid-layoutandroid-datepicker

How to disable dates before today date in DatePickerDialog Android?


I want to disable the dates before today date in the DatePickerDialog .I am new in android please suggest me how could i do this .Here is my code that i have written for DatePickerDialog

 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(val);
            }
        };
        depart.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    new DatePickerDialog(this, date, myCalendar
                            .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                            myCalendar.get(Calendar.DAY_OF_MONTH)).show();
                    val=1;
                }
            });

        returnDate.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    new DatePickerDialog(this, date, myCalendar
                            .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                            myCalendar.get(Calendar.DAY_OF_MONTH)).show();
                            val=2;
                }
            });


private void updateLabel(int val) {

        String myFormat = "dd/MM/yy"; //In which you need put here
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
        Log.d("Date vlue ", "==="+sdf.format(myCalendar.getTime()));
        if(val==1)
            depart.setText(sdf.format(myCalendar.getTime()));
        else
            returnDate.setText(sdf.format(myCalendar.getTime()));

        }

Please suggest me what have to do


Solution

  • See this example..!

    import java.util.Calendar;
    import android.app.Activity;
    import android.app.DatePickerDialog;
    import android.app.Dialog;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.DatePicker;
    import android.widget.TextView;
    
    public class MyAndroidAppActivity extends Activity {
    
        private TextView tvDisplayDate;
    
        private Button btnChangeDate;
    
        private int myear;
        private int mmonth;
        private int mday;
    
        static final int DATE_DIALOG_ID = 999;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            setCurrentDateOnView();
            addListenerOnButton();
    
        }
    
        // display current date
        public void setCurrentDateOnView() {
    
            tvDisplayDate = (TextView) findViewById(R.id.tvDate);       
    
            final Calendar c = Calendar.getInstance();
            myear = c.get(Calendar.YEAR);
            mmonth = c.get(Calendar.MONTH);
            mday = c.get(Calendar.DAY_OF_MONTH);
    
            // set current date into textview
            tvDisplayDate.setText(new StringBuilder()
                    // Month is 0 based, just add 1
                    .append(mmonth + 1).append("-").append(mday).append("-")
                    .append(myear).append(" "));
        }
    
        public void addListenerOnButton() {
    
            btnChangeDate = (Button) findViewById(R.id.btnChangeDate);
    
            btnChangeDate.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
    
                    showDialog(DATE_DIALOG_ID);
    
                }
    
            });
    
        }
    
        @Override
        protected Dialog onCreateDialog(int id) {
            switch (id) {
            case DATE_DIALOG_ID:
                // set date picker as current date
                DatePickerDialog _date =   new DatePickerDialog(this, datePickerListener, myear,mmonth,
                        mday){
                    @Override
                    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
                    {   
                        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);
    
                    }
                };
                return _date;
            }
            return null;
        }
    
        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) {
                myear = selectedYear;
                mmonth = selectedMonth;
                mday = selectedDay;
    
                // set selected date into textview
                tvDisplayDate.setText(new StringBuilder().append(mmonth + 1)
                        .append("-").append(mday).append("-").append(myear)
                        .append(" "));    
    
            }
        };
    
    }
    

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/btnChangeDate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Change Date" />
    
        <TextView
            android:id="@+id/lblDate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Current Date (M-D-YYYY): "
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
        <TextView
            android:id="@+id/tvDate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
    </LinearLayout>