MaterialDatePicker显示当前日期,而不是需要的日期。

问题描述 投票:0回答:1

使用 MaterialDatePicker 我想显示所需的日期,并给一个选择另一个日期的机会,但当DatePicker出现时,它显示的是当前日期而不是指定的日期。但是当DatePicker出现时,它显示的是当前日期而不是指定日期。

我插入了库。implementation 'com.google.android.material:material:1.2.0-alpha06' (或1. 1. 0).

然后覆盖 AppThemestyles.xml:

<style name="AppTheme" parent="Theme.MaterialComponents.Light">

现在可以显示DatePicker。

val now = Calendar.getInstance()
now[Calendar.YEAR] = 2020
now[Calendar.MONTH] = 10
now[Calendar.DAY_OF_MONTH] = 1
val builder = MaterialDatePicker.Builder.datePicker()
builder.setSelection(now.timeInMillis)

val picker = builder.build()
fragmentManager?.let { picker.show(it, MaterialDatePicker::class.java.simpleName) }

这是一个结果。我想显示11月1日,但它显示5月7日。

enter image description here

更新1

如上面链接中写的,我们可以用 CalendarConstraints.Builder:

...
val constraintsBuilder = CalendarConstraints.Builder()
constraintsBuilder.setStart(now.timeInMillis)
constraintsBuilder.setEnd(now.timeInMillis)

val builder = MaterialDatePicker.Builder.datePicker()
builder.setCalendarConstraints(constraintsBuilder.build())
builder.setSelection(now.timeInMillis)
...

这将显示所需的日期,我们可以选择其他日期,但不能滚动月份。

enter image description here

更新2

我想这是一个新的Android DatePicker的bug。所以我必须选择知名的库 https:/github.comwdullaerMaterialDateTimePicker。. 它可以选择一个指定的日期,而且不需要改变原来的主题。

enter image description here

android android-datepicker
1个回答
1
投票

你可以通过以下方法设置picker打开的月份。constraintsBuilder.setOpenAt().如果在范围内,默认值为当前月份,否则为范围内最早的月份。

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

LocalDateTime local = LocalDateTime.of(2020, 11, 1, 0, 0);
long openAt= local.atZone(ZoneId.ofOffset("UTC", ZoneOffset.UTC)).toInstant().toEpochMilli();
//you can also use Calendar.getInstance()...
constraintsBuilder.setOpenAt(openAt);

builder.setCalendarConstraints(constraintsBuilder.build());

您可以通过以下方式设置默认选择(默认为无选择):

builder.setSelection(....);

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.