MaterialDatePicker 显示当前日期而不是需要的
MaterialDatePicker shows current date instead of needed
使用 MaterialDatePicker 我想显示所需的日期并给 select 另一个机会。但是当 DatePicker 出现时,它显示当前日期而不是指定日期。
我插件库:implementation 'com.google.android.material:material:1.2.0-alpha06'
(或1.1.0)。
然后在 styles.xml
中覆盖 AppTheme
:
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
现在可以显示日期选择器了。
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 日。
更新 1
如上文link,我们可以使用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)
...
这将显示所需的日期,我们可以 select 改天,但我们不能滚动月份。
更新 2
我想这是新 Android DatePicker 的错误。所以我要select知名图书馆https://github.com/wdullaer/MaterialDateTimePicker。它 select 是一个指定的日期,不需要更改原始主题。
您可以使用方法 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(....);
使用 MaterialDatePicker 我想显示所需的日期并给 select 另一个机会。但是当 DatePicker 出现时,它显示当前日期而不是指定日期。
我插件库:implementation 'com.google.android.material:material:1.2.0-alpha06'
(或1.1.0)。
然后在 styles.xml
中覆盖 AppTheme
:
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
现在可以显示日期选择器了。
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 日。
更新 1
如上文link,我们可以使用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)
...
这将显示所需的日期,我们可以 select 改天,但我们不能滚动月份。
更新 2
我想这是新 Android DatePicker 的错误。所以我要select知名图书馆https://github.com/wdullaer/MaterialDateTimePicker。它 select 是一个指定的日期,不需要更改原始主题。
您可以使用方法 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(....);