Android DatePickerDialog Max Date визуальная ошибка - PullRequest
0 голосов
/ 05 октября 2018

У меня странная визуальная ошибка в новом DatePickerDialog виджетов Android.Мне нужно установить диапазон дат в диалоговом окне как 1 месяц, но он также не должен выбирать дату из будущего.Логика работает, как и ожидалось, но визуальные эффекты имеют какую-то ошибку.Вот как это выглядит:

Image of Bug

Обратите внимание, что «5» отключен, я не могу выбрать его.Тем не менее, это выглядит как выбираемый.Что я должен сделать, чтобы решить эту проблему?Любая помощь приветствуется, спасибо.(Сегодняшний день месяца также равен 5, я предполагаю, что эта ошибка возникла оттуда.)

Редактировать: это то, как я создаю диалог.

@SuppressLint("ValidFragment")
    public static class DateDialog extends DialogFragment implements DatePickerDialog.OnDateSetListener
    {
        private static final long MONTH = 2592000000L;

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState)
        {
            // Use previous selected date in the date picker

            final Calendar c = Calendar.getInstance();
            c.setTimeInMillis(DateUtils.getAtTimeTimestamp(startDate));

            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog dialog = new DatePickerDialog(getActivity(), R.style.AppTheme_DialogTheme, this, year, month, day);
            Date date = new Date(); // get current time

            // get target maximum date which can be 1 month above
            long targetDateTime = DateUtils.getAtTimeTimestamp(startDate) + MONTH;
            if (date.getTime() < targetDateTime)
                dialog.getDatePicker().setMaxDate(date.getTime()); // now because it can't be future
            else
                dialog.getDatePicker().setMaxDate(targetDateTime); // should also be one month above from the start date.
            dialog.getDatePicker().setMinDate(DateUtils.getAtTimeTimestamp(startDate));
            return dialog;
        }

        @Override
        public void onDateSet(DatePicker datePicker, int i, int i1, int i2)
        {
            // logic between date selections
        }
    }

DateUtils.getAtTimeTimestamp (String date) в основном преобразует строку в длинное целое число, то есть время в миллисекундах.

...