Пользовательский календарь / выбор даты для Android

Вот как выглядит новый виджет DatePickerDialog по умолчанию, как он выглядит из Android 5.0 и более поздние версии:

введите здесь описание изображения

Это не очень нравится моим руководителям проектов. То, что они хотят, это «старый стиль» выбора даты Holo, каким он был до Marshmallow & Lollipop. Что-то вроде этого:

введите здесь описание изображения

Передо мной два варианта:

  • Используйте существующий виджет календаря, разработанный кем-то другим, который выглядит так же, как и выше.
  • Создайте свой собственный виджет календаря с полной функциональностью календаря.

Если мне нужно создать свой собственный виджет, то создать пользовательский интерфейс достаточно просто. Мой вопрос в том, как мне написать бизнес-логику для такого календаря, т.е. как мне подкрепить его реальными данными? Как учитывать високосные годы и количество дней в разных месяцах? Самое главное, мне нужно, чтобы три NumberPickers были синхронизированы, когда речь идет о минимальном и максимальном диапазоне. НЕ должна быть возможность прокрутки выходит за пределы мин. и макс. Это проблема, которую я не смог решить.

Вот что я сделал до сих пор:

  • Я использовал виджет NumberPicker внутри DialogFragment, и я использовал setMinValue() и setMaxValue(), чтобы установить диапазон каждого NumberPicker.
  • Когда год меняется (скажем, с 2011 на 2012), я вычисляю количество дней в текущем месяце, используя

       cal = new GregorianCalendar(y, m, d);
       daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    

    как описано здесь.

  • Когда пользователь прокручивает с декабря на январь или с января на декабрь, я программно прокручиваю средство выбора года для увеличения или уменьшения соответственно, как описано здесь.
  • Средства выбора дня, месяца и года не могут прокручиваться за пределы своих минимальных и максимальных значений с помощью setWrapSelectorWheel().

Итак, мой вопрос: есть ли уже существующий виджет, такой как этот, который я могу использовать? В качестве альтернативы, есть ли способ поддержать NumberPickers реальными данными календаря и синхронизировать их прокрутку в пределах минимального и максимального диапазона дат? Пожалуйста, помогите мне. Все ответы будут оценены.

ИЗМЕНИТЬ:

Хотя данный ответ работает, стоит отметить, что есть еще лучший способ: обернуть ссылку DatePicker в DialogFragment.


person Y.S    schedule 08.01.2016    source источник
comment
Вы не имеете никакого отношения к бизнес-логике календаря. Просто используйте API календаря и поэкспериментируйте со своим пользовательским интерфейсом.   -  person Pankaj Kumar    schedule 08.01.2016
comment
@PankajKumar: Можно ли здесь использовать API календаря? Моя основная проблема здесь заключается в синхронной прокрутке трех сборщиков при прокрутке месяца и предотвращении прокрутки сборщиков за пределы минимального максимального диапазона (опять же синхронно)...   -  person Y.S    schedule 08.01.2016


Ответы (1)


Вы можете использовать средство выбора даты API и указать ему использовать Holo Design с помощью этого конструктора: DatePickerDialog (Context, int, DatePickerDialog.OnDateSetListener, int, int, int)

См. комментарии к этому вопросу: сбой DatePicker в samsung с android 5.0

Возможно, вам придется немного изменить тему.

Вот как мы используем это в действии: https://github.com/dmfs/opentasks/blob/master/src/org/dmfs/tasks/widget/TimeFieldEditor.java#L437

person Marten    schedule 08.01.2016
comment
Спасибо за ваш отзыв .... это очень помогло ... Я отмечу это как правильный ответ, если никто другой не даст лучшего ответа ... :) - person Y.S; 08.01.2016
comment
не уверен, насколько лучше может быть ответ ;-) - person Marten; 12.01.2016