How to disable dates before today date in DatePickerDialog Android?

前端 未结 5 962
深忆病人
深忆病人 2020-11-30 07:18

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 Dat

相关标签:
5条回答
  • 2020-11-30 07:23

    I got the solution .hope it will help to someone static final int DATE_DIALOG_ID = 999;

    depart.setOnClickListener(new View.OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        showDialog(DATE_DIALOG_ID);
    
                    }
                });
    
    
    
    protected Dialog onCreateDialog(int id) {
            final Calendar now = Calendar.getInstance();
    
            switch (id) {
            case DATE_DIALOG_ID:
                // set date picker as current date
                DatePickerDialog _date =   new DatePickerDialog(this, date,myCalendar
                        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                        myCalendar.get(Calendar.DAY_OF_MONTH)){
                    @Override
                    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
                    {   
                        if (year < now.get(Calendar.YEAR))
    
                            view.updateDate(myCalendar
                                    .get(Calendar.YEAR), myCalendar
                                    .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));
    
                        if (monthOfYear < now.get(Calendar.MONTH) && year == now.get(Calendar.YEAR))
                            view.updateDate(myCalendar
                                    .get(Calendar.YEAR), myCalendar
                                    .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));
    
                        if (dayOfMonth < now.get(Calendar.DAY_OF_MONTH) && year == now.get(Calendar.YEAR) && 
                                monthOfYear == now.get(Calendar.MONTH))
                            view.updateDate(myCalendar
                                    .get(Calendar.YEAR), myCalendar
                                    .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));
                            }
                };
                return _date;
            }
            return null;
        }
    
    0 讨论(0)
  • 2020-11-30 07:31

    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>
    
    0 讨论(0)
  • 2020-11-30 07:40

    Get the DatePicker used in your DatePickerDialog with the getDatePicker() method and use the setMinDate(Long millis) method.

    Pass to it the minimum date (in milliseconds from Epoch) you have to set.

    So you can do something like

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Date d = sdf.parse("21/12/2012");
    DatePicker datePicker = date.getDatePicker();
    datePicker.setMinDate(d.getTime());
    

    EDIT:

    ok, so when your creating your DatePickerDialog, before showing it, just save it to a variable, set the minimum date and then show it.

    DatePickerDialog dpd = new DatePickerDialog(IweenFlightSearch.this, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Date d = sdf.parse("21/12/2012");
    dpd.getDatePicker().setMinDate(d.getTime());
    dpd.show();
    

    this should work.

    0 讨论(0)
  • 2020-11-30 07:41

    I know it is too late. But hope this will helps. Use

    date .getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
    

    in your case date is DatePickerDialog

    Cheers!

    0 讨论(0)
  • 2020-11-30 07:47

    // Create a new instance of DatePickerDialog and return it

     DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this,year,month,day);
                datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis());
                return datePickerDialog;
    
    0 讨论(0)
提交回复
热议问题