web-dev-qa-db-ja.com

Android DatePickerDialog:選択の最小日付と最大日付を設定

これについては非常に多くの質問があることは知っていますが、解決策はありません。ユーザーに今日より前の日付を選択するように制限したいのですが、できません。

_public class DatePickerDialogFragment extends DialogFragment {

    private OnDateSetListener listener;

    public void setListener(OnDateSetListener listener) {
        this.listener = listener;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Calendar calendar = Calendar.getInstance();
        int year    = calendar.get(Calendar.YEAR);
        int month   = calendar.get(Calendar.MONTH);
        int day     = calendar.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog dialog = new DatePickerDialog(getContext(), listener, year, month, day);
        dialog.getDatePicker().setMinDate(calendar.getTimeInMillis());
        return dialog;
    }
}
_

私はそれを次のように示しています:

_DatePickerDialogFragment fragment = new DatePickerDialogFragment();
fragment.setListener(dateSetListener);
fragment.show(getSupportFragmentManager(), "Choose booking date");
_

ユーザーが今日より前の日付を選択できないようにする必要があります。ご覧のとおり、今日の時間でsetMinDate()メソッドを呼び出しましたが、効果はありません。ダイアログには、今日より前の日付がグレーで選択可能として表示されます。

また、いくつかのstackoverflowの回答で示唆されているように、DatePickerDialogをサブクラス化し、onDateChangedをオーバーライドしようとしましたが、成功しませんでした。

15
Abdullah

システム時間を取得し、それから1秒を引きます

 @Override
 public Dialog onCreateDialog(Bundle savedInstanceState) {
    Calendar calendar = Calendar.getInstance();
    int year    = calendar.get(Calendar.YEAR);
    int month   = calendar.get(Calendar.MONTH);
    int day     = calendar.get(Calendar.DAY_OF_MONTH);

     dialog = new DatePickerDialog(act, listener, year, month, day);
     dialog.getDatePicker().setMinDate(System.currentTimeMillis() -1000);
     return dialog;
 }
6
Kishore Jethava
dialog.getDatePicker().setMinDate(calendar.getTimeInMillis());
3
Arpit

API 11より上

_Android:minDate="mm/dd/yyyy"_またはsetMinDate(long time)最大日付の場合

_Android:maxDate="mm/dd/yyyy"_ // XMLで

setMaxDate(new Date().getTime()); //現在の時刻

1
Sangeeta