当前位置: 首页 > 知识库问答 >
问题:

MaterialDatePicker仅选择两个日期之间的日期

慕容宏毅
2023-03-14

如何向MaterialDatePicker添加约束以强制用户选择仅介于两个日期之间的日期?

val constraintBuilder = CalendarConstraints.Builder()
    val materialRangeBuilder = MaterialDatePicker.Builder.datePicker()
    materialRangeBuilder.setTitleText("Book Date")
    materialRangeBuilder.setCalendarConstraints(constraintBuilder.build())

    val materialRangePicker = materialRangeBuilder.build()

    materialRangePicker.addOnPositiveButtonClickListener {
        Timber.d("$it")
    }

    materialRangePicker.show(supportFragmentManager, "DATE_RANGE_PICKER")

共有3个答案

桂玉石
2023-03-14

用这两种方法

public void setMinDate (long minDate)
public void setMaxDate (long maxDate)

这是正式留档https://developer.android.com/reference/android/widget/DatePicker#setMaxDate

实例

val calender = Calendar.getInstance()
val year = calender.get(Calendar.YEAR)
val month = calender.get(Calendar.MONTH)
val day = calender.get(Calendar.DAY_OF_MONTH)
materialRangeBuilder.setMinDate(calender.getTimeInMillis())
materialRangeBuilder.setMaxDate(calender.getTimeInMillis())
劳英华
2023-03-14

@GabrieleMariotti回答是好的,但是DateValidatorPointBackwards类在版本1.2之前不在材料设计库中。如果您想在两个日期之间进行选择,并且您有材料设计库版本1.1或更早版本,您可以这样做:

val datePickerBuilder = MaterialDatePicker.Builder.datePicker()
datePickerBuilder.setCalendarConstraints(
    CalendarConstraints.Builder()
        .setValidator(object : CalendarConstraints.DateValidator {
            override fun isValid(date: Long): Boolean {
                return date >= startDate && date < endDate
            }

            override fun writeToParcel(p0: Parcel?, p1: Int) {}

            override fun describeContents(): Int {return 0}
        }).build()
)
val datePicker = datePickerBuilder.build()
datePicker!!.show(fragmentManager, "date picker")

其中startDate和endDate是长值

燕博文
2023-03-14

您可以使用DateValidator来限制选择。
特别是您可以使用内置验证器:

  • DateValidatorPointForward启用从给定点向前的日期
  • DateValidatorPointBackward仅启用给定点之前的日期。

类似的东西:

MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();

CalendarConstraints.Builder constraintsBuilderRange = new CalendarConstraints.Builder();

//....define min and max for example with LocalDateTime and ZonedDateTime or Calendar

CalendarConstraints.DateValidator dateValidatorMin = DateValidatorPointForward.from(min.getTimeInMillis());
CalendarConstraints.DateValidator dateValidatorMax = DateValidatorPointBackward.before(max.getTimeInMillis());

ArrayList<CalendarConstraints.DateValidator> listValidators =
            new ArrayList<CalendarConstraints.DateValidator>();
listValidators.add(dateValidatorMin);
listValidators.add(dateValidatorMax);
CalendarConstraints.DateValidator validators = CompositeDateValidator.allOf(listValidators);
constraintsBuilderRange.setValidator(validators);

builder.setCalendarConstraints(constraintsBuilderRange.build());

MaterialDatePicker<Long> picker = builder.build();
picker.show(getSupportFragmentManager(), picker.toString());
 类似资料:
  • 问题内容: 我有一个和。我想获取这两个日期之间的日期列表。谁能帮助我指出查询中的错误。 这是一个变量。 问题答案: 您应该将这两个日期放在单引号之间,例如。 或可以使用 请记住,第一个日期是包含日期,但第二个日期是排除日期,因为它实际上是“ 2011/02/27 00:00:00”

  • 问题内容: 我正在使用数据库存储日志,其中“日期”列保存了插入日期。日期的格式为“ MM / DD / YY”。请任何人建议我如何在两个特定日期之间选择数据。例如,我尝试了这个: 但是我想这行不通,因为日期不是数字。谢谢您的帮助!:) 问题答案: 使用关键字:

  • 问题内容: 我从csv创建一个DataFrame,如下所示: DataFrame有一个日期列。有没有一种方法来创建一个新的DataFrame(或仅覆盖现有的DataFrame),该DataFrame仅包含日期值在指定日期范围内或两个指定日期值之间的行? 问题答案: 有两种可能的解决方案: 使用布尔型掩码,然后使用 将日期列设置为,然后使用 使用布尔型掩码: 确保是系列: 制作一个布尔型面具。可以,

  • 问题内容: 我想选择两个日期之间的记录- startDate和endDate(它们是sql中的日期/时间格式)。我有以下sql查询,但它不起作用,有人可以告诉我我在做什么错吗? 问题答案: 我建议将日期转换为日期时间并进行比较,并使日期保持标准和一致。就像是: 注意:我假设您的startDate和endDate与您提供的字符串具有相同的格式。

  • 问题内容: 我正在寻找创建一条选择语句,该语句将每小时在@minDateTime和@maxDateTime之间返回,如下所示(没有可供选择的表。我不在寻找where子句!): 问题答案: 试试这个。使用。 在上面的查询中,a的基本记录由之前的第一个sql查询派生。查询结果为您提供。 重复执行第二个查询以获取结果。此过程 将继续进行,直到Dates少于。

  • 问题内容: 我有两个这样的表: 表格1 表2 我想从 Table1中 选择并插入 Table2中 。 例如: 在表1中,我有这个 在表2中,我想要这个 带有样本数据的表结构 问题答案: 感谢您的架构。它使处理您的问题变得容易。我对您的架构进行了一些更改以利用auto_increment 在这里,我在emp_leave_daywise表上添加了唯一约束,因为id整数上的主键不能确保记录不重复。 em