【问题标题】:how to disable preveious date in a date picker?如何在日期选择器中禁用上一个日期?
【发布时间】:2018-06-08 11:31:48
【问题描述】:

我正在使用公历,我需要在 android 中禁用以前的日期直到当前日期。我已经检查了 setMinDate 方法,但它不起作用..有人可以帮助我吗?这是我的代码..

 public void SelectDateTime() {
        final View dialogView = View.inflate(getApplicationContext(), R.layout.date_picker_activate, null);
        DateTimeDialog = new AlertDialog.Builder(getApplicationContext()).create();
        dialogView.findViewById(R.id.cancelBtn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DateTimeDialog.dismiss();
            }
        });
        dialogView.findViewById(R.id.date_time_set).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DatePicker datePicker = (DatePicker) dialogView.findViewById(R.id.datePicker1);
                TimePicker timePicker = (TimePicker) dialogView.findViewById(R.id.timePicker);
                Calendar calendar = new GregorianCalendar(datePicker.getYear(),
                        datePicker.getMonth(),
                        datePicker.getDayOfMonth(),
                        timePicker.getCurrentHour(),
                        timePicker.getCurrentMinute());

                datePicker.getMinDate();

                final long today1 = System.currentTimeMillis() - 1000;

                calendar.after(System.currentTimeMillis());

               // datePicker.setMinDate(calendar.getTimeInMillis());

【问题讨论】:

标签: android datepicker gregorian-calendar


【解决方案1】:

使用此代码

    public static class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day);
        // dialog.getDatePicker().setMaxDate(c.getTimeInMillis());
        dialog.getDatePicker().setMinDate(c.getTimeInMillis());
        return dialog;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        txt_date.setText(String.format(Locale.ENGLISH, "%02d/%02d/%d", day, month + 1, year));
    }
}

在侧边按钮点击调用这个方法

DialogFragment newFragment = new DatePickerFragment();
            newFragment.show(getActivity().getSupportFragmentManager(), "datePicker");

这一行设置最小日期 - dialog.getDatePicker().setMinDate(c.getTimeInMillis());

并使用它来设置最大日期

dialog.getDatePicker().setMaxDate(c.getTimeInMillis());

【讨论】:

  • 删除您的代码并尝试此代码。它在我的情况下工作。
  • 兄弟,我需要时间选择器和这个日历......你能帮帮我吗?
  • 但是这里的 txt_date 应该是静态的,我不想将它设置为静态的。请给我解决方案
【解决方案2】:

这将禁用以前的日期

public void showDateToSelect() {
        // Get Current Date
        final Calendar c = Calendar.getInstance();
        int mYear = c.get(Calendar.YEAR);
        int mMonth = c.get(Calendar.MONTH);
        int mDay = c.get(Calendar.DAY_OF_MONTH);
        /*DatePicker dialog to select date*/
        DatePickerDialog datePickerDialog = new DatePickerDialog(mContext,
                new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                        textView.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);
                    }
                }, mYear, mMonth, mDay);
        /*To show only dates from today to future*/
        datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
        datePickerDialog.show();
    }

【讨论】:

    【解决方案3】:

    使用这个库

    implementation 'com.github.florent37:singledateandtimepicker:1.2.1' 
    

    并使用以下代码启动

     startSingleDateAndTimePickerDialog = new SingleDateAndTimePickerDialog.Builder(context);
                startSingleDateAndTimePickerDialog
                        .bottomSheet()
                        .curved()
                        .displayHours(true)
                        .displayMinutes(true)
                        .minDateRange(new Date(minDate))
                        .defaultDate(new Date(defaultDate))
                        .mustBeOnFuture()
    .displayListener(new SingleDateAndTimePickerDialog.DisplayListener() {
                        @Override
                        public void onDisplayed(SingleDateAndTimePicker picker) {
                            //retrieve the SingleDateAndTimePicker
                        }
                    })
    
                    .title("Date & Time")
                    .listener(new SingleDateAndTimePickerDialog.Listener() {
                        @Override
                        public void onDateSelected(Date date) {
    
                            Date currentDate = new Date(System.currentTimeMillis());
    
    
    
         String dateTime = getDate(date.getTime() / 1000);
    textview.settext(dateTime);
    
                        }
                    }).display();
    
    
    
    
    
    
     public static String getDate(long timeStamp) {
            Date time = new Date(timeStamp*1000);
            SimpleDateFormat df2 = new SimpleDateFormat("MMM dd,yyy h:mm a");
            return df2.format(time);
        }
    

    【讨论】:

    • 嗨兄弟,在这里我必须设置 textview 日期
    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2014-11-10
    • 2020-08-25
    • 2012-09-29
    相关资源
    最近更新 更多