Omk*_*rye 5 android datepicker android-datepicker datepickerdialog android-studio
我很想有一个选项,我可以使用 calendarConstraints 选择一个 maxDate 和一个 minDate。就像普通的 DatePicker 有DatePicker.setMaxDate()
和DatePicker.setMinDate()
方法一样,我会喜欢 materialDatePicker 的相同方法。
我在开发我的应用程序时使用了 materialDatePicker,我发现很难为打开的 datePicker 设置 minDate 和 maxDate 属性。我正在打开日期选择器以在 2 个不同的文本字段中选择开始日期和结束日期以添加特定时间段。不,我不想选择范围日期。我已经研究过这个,它不符合我的要求。我可以设置一个maxDate
使用
calendarConstraints.setValidator(DateValidatorPointForward.from(startDate))
Run Code Online (Sandbox Code Playgroud)
但我无法使用 materialDatePicker 选择 minDate。
代码:
CalendarConstraints.Builder ccb=new CalendarConstraints.Builder();
// ccb.setEnd(calendar.getTimeInMillis());
// ccb.setEnd(today);
MaterialDatePicker.Builder<Pair<Long,Long>> builder = MaterialDatePicker.Builder.dateRangePicker();
builder.setTitleText("Select Date Range");
builder.setCalendarConstraints(ccb.build());
Run Code Online (Sandbox Code Playgroud)
tam*_*mnd 11
您应该使用函数 DateValidatorPointBackward 来设置 maxDate。像这样的东西:
val constraintsBuilder = CalendarConstraints.Builder()
val validators: ArrayList<CalendarConstraints.DateValidator> = ArrayList()
validators.add(DateValidatorPointForward.from(minDate))
validators.add(DateValidatorPointBackward.before(maxDate))
constraintsBuilder.setValidator(CompositeDateValidator.allOf(validators))
Run Code Online (Sandbox Code Playgroud)
您可以创建一个自定义CalendarConstraints.DateValidator
类,该类采用最小和最大日期,并通过覆盖isValid()
方法验证它们,该方法返回一个布尔值,指示将显示在屏幕上的某个日期是否有效。
这是一个完整的示例,它选择从 15/02/2020 到 20/03/2020 的日期
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MaterialDatePicker.Builder<Pair<Long, Long>> builderRange = MaterialDatePicker.Builder.dateRangePicker();
builderRange.setCalendarConstraints(limitRange().build());
builderRange.setTitleText("Select Date Range");
MaterialDatePicker<Pair<Long, Long>> pickerRange = builderRange.build();
pickerRange.show(getSupportFragmentManager(), pickerRange.toString());
}
/*
Limit selectable Date range
*/
private CalendarConstraints.Builder limitRange() {
CalendarConstraints.Builder constraintsBuilderRange = new CalendarConstraints.Builder();
Calendar calendarStart = Calendar.getInstance();
Calendar calendarEnd = Calendar.getInstance();
int year = 2020;
int startMonth = 2;
int startDate = 15;
int endMonth = 3;
int endDate = 20;
calendarStart.set(year, startMonth - 1, startDate - 1);
calendarEnd.set(year, endMonth - 1, endDate);
long minDate = calendarStart.getTimeInMillis();
long maxDate = calendarEnd.getTimeInMillis();
constraintsBuilderRange.setStart(minDate);
constraintsBuilderRange.setEnd(maxDate);
constraintsBuilderRange.setValidator(new RangeValidator(minDate, maxDate));
return constraintsBuilderRange;
}
static class RangeValidator implements CalendarConstraints.DateValidator {
long minDate, maxDate;
RangeValidator(long minDate, long maxDate) {
this.minDate = minDate;
this.maxDate = maxDate;
}
RangeValidator(Parcel parcel) {
minDate = parcel.readLong();
maxDate = parcel.readLong();
}
@Override
public boolean isValid(long date) {
return !(minDate > date || maxDate < date);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(minDate);
dest.writeLong(maxDate);
}
public static final Parcelable.Creator<RangeValidator> CREATOR = new Parcelable.Creator<RangeValidator>() {
@Override
public RangeValidator createFromParcel(Parcel parcel) {
return new RangeValidator(parcel);
}
@Override
public RangeValidator[] newArray(int size) {
return new RangeValidator[size];
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3840 次 |
最近记录: |