微调器模式下的Android DatePicker不显示日期

时间:2018-07-26 03:50:56

标签: android datepicker android-datepicker

我在微调器模式下使用DatePicker,并设置了最小和最大限制。然后将日期更新为最大值。显示DatePickerDialog时,“日期”列没有值。当我点击/向上滚动或向下滚动时,将显示这些值。

MyLayout:

         <DatePicker
                android:id="@+id/date_picker"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginLeft="@dimen/spacing_default"
                android:layout_marginRight="@dimen/spacing_default"
                android:datePickerMode="spinner"
                android:calendarViewShown="false" />

Java部件:(在onViewCreated中)

 private static final int DATE_PICKER_MONTH_OFFSET = 1;
 private static final int DATE_PICKER_MIN_DATE_OFFSET_IN_MIN = 1;

datePicker.setMinDate( now().minusMinutes( 
         DATE_PICKER_MIN_DATE_OFFSET_IN_MIN).getMillis() );
datePicker.setMaxDate( activationDateTime.getMillis() );
datePicker.updateDate( activationDateTime.getYear(), 
         activationDateTime.getMonthOfYear() - DATE_PICKER_MONTH_OFFSET,
                    activationDateTime.getDayOfMonth() );

问题屏幕截图:

enter image description here

显示DatePickerDialog时要显示日期部分还需要做些什么?

更新/编辑:

当设置的值与最大限制相同时,选择器似乎显示一个空视图。我可以通过先放置DatePicker然后调用datePicker.updateDate来解决问题(在启动datePicker.setMaxDate时)。 setMaxDate将验证先前的值并正确设置。 但是现在当我滚动从7月到8月的月份时,我会遇到同样的问题,天视图变成空的!

任何解决方案/建议表示赞赏。

2 个答案:

答案 0 :(得分:0)

DatePicker模式下,Android小部件spinner中似乎存在错误。 Google问题追踪器中已经存在这样的票证:https://issuetracker.google.com/issues/64508670

很遗憾,问题跟踪器中没有解决方法或建议。

答案 1 :(得分:0)

有同样的问题。这样解决:

 datePicker.init(initYear, initMonthOfYear, initDayOfMonth,
            new DatePicker.OnDateChangedListener() {
                @Override
                public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                    Resources res = Resources.getSystem();
                    int id = res.getIdentifier("day", "id", "android");
                    NumberPicker dayPicker = datePicker.getRootView().findViewById(id);
                    if (dayPicker != null) {
                        id = res.getIdentifier("numberpicker_input", "id", "android");
                        TextView inputText = dayPicker.findViewById(id);
                        if (inputText != null && TextUtils.isEmpty(inputText.getText())) {
                            inputText.setText(String.valueOf(dayPicker.getValue()));
                        }
                    }
                }
            });