ユーザーがそれ以上日付を選択できないように日付に制限を設けたいと思います。たとえば、今日が1月1日である場合、ユーザーは7つ以上の日付を選択できないはずです。つまり、1月9日は選択できません。また、月と年を選択しないようにしてください。だから私は彼の仕事を1週間で設定することに制限を課しています。
これまでに行ったことは、日付ピッカーフラグメントを表示し、それに現在の日付を設定することです。私の主な活動のコードは次のようになります:
etSelectDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment datePickerFragment = new DatePickerFragment() {
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
Log.d("Date Change", "onDateSet");
Calendar c = Calendar.getInstance();
c.set(year, month, day);
DateFormat df = DateFormat.getDateInstance();
etSelectDate.setText(df.format(c.getTime()));
//nextField.requestFocus(); //moves the focus to something else after dialog is closed
}
};
datePickerFragment.show(MainActivity.this.getSupportFragmentManager(), "datePicker");
}
});
そして日付ピッカーフラグメントクラスは次のようになります:
public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
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);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
//blah
}
}
それまでは問題なく動作しますが、日付に制限を設ける方法がわかりません。残りの月と年は選択不可にする必要があります。 this のような多くのリンクを見てきましたが、どうすればよいのかわかりません。また、Androidサイトでは役に立ちません。
だから私を助けてください、どうすれば7日間の制限を置くことができますか
更新
あなたの返信を通して、カレンダーで最大日付を設定する方法を知っています。したがって、最大日付を現在の日付より7日前に設定したいので、まだ取得できません。私がこれまで読んだ方法は:
pickerDialog.getDatePicker().setMaxDate(new Date().getTime());
現在の日付を最大に設定していますが、日付オブジェクトなので7日先に追加するにはどうすればよいですか?助けてください
setMinDate(long)
およびsetMaxDate(long)
メソッドを自由に使用できます。これらはどちらもAPIレベル11以上で動作します。 DatePickerDialog
を使用しているため、最初にgetDatePicker()
メソッドを呼び出して、基になるDatePickerを取得する必要があります。
dpdialog.getDatePicker().setMinDate(minDate);
dpdialog.getDatePicker().setmaxDate(maxDate);
ソース: AndroidのDatePickerDialogに制限を設定しますか?
次を使用してminDateを計算できます。
Date today = new Date();
Calendar c = Calendar.getInstance();
c.setTime(today);
c.add( Calendar.MONTH, -6 ) // Subtract 6 months
long minDate = c.getTime().getTime() // Twice!
更新:
以下の行を置き換えます
return new DatePickerDialog(getActivity(), this, year, month, day);
と
// Create a new instance of DatePickerDialog and return it
DatePickerDialog pickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
pickerDialog.getDatePicker().setMaxDate(maxDate);
pickerDialog.getDatePicker().setMinDate(minDate);
return pickerDialog;
時と分のない日付で最大日付を設定すると、設定した最大日付を選択できない場合があります。例えば
Calendar maxDate = Calendar.getInstance();
maxDate.set(Calendar.DAY_OF_MONTH, day + 5);
maxDate.set(Calendar.MONTH, month);
maxDate.set(Calendar.YEAR, year);
datePickerDialog.getDatePicker().setMaxDate(maxDate.getTimeInMillis());
上記のコードブロックでは、maxDateをクリックすることはできません。
しかし、好きなように時間と分を追加すると、
maxDate.set(Calendar.HOUR, 23);
maxDate.set(Calendar.MINUTE, 59);
あなたのmaxDateに、あなたの最後の日付がクリック可能になります
これを試して
DatePickerDialog dpDialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay);
DatePicker datePicker = dpDialog.getDatePicker();
Calendar calendar = Calendar.getInstance();//get the current day
datePicker.setMaxDate(calendar.getTimeInMillis());//set the current day as the max date or put yore date in miliseconds.
datePicker.setMinDate(calendar.getTimeInMillis());//set the current day as the min date or put your date in mili seconds format
return dpDialog;