2010-09-14 2 views
30

Я пишу свое первое приложение, и у меня есть вопрос о DatePicker.Android Calendar View for Date Picker

Моим приложениям требуется, чтобы пользователь вводил дату. Наиболее удобный способ будет всплывать календарь, как виджет, который отображает текущий месяц, как в сетке календаря - что-то вроде этого:

enter image description here

Я хочу использовать, что вместо интерфейса DatePicker - который имеет поля Месяц, День и Год, каждый с кнопкой вверх и вниз для увеличения/уменьшения.

Является ли этот тип функциональности встроенным в любой виджет Android или просмотр, или мне нужно будет создать собственный пользовательский компонент для этого? Я полагал, что это уже существует, учитывая, насколько этот тип пользовательского интерфейса используется так часто в немобильных приложениях и веб-страницах.

Спасибо!

+0

Не могли бы вы обновить выбранный ответ на этот квест ион? Люди могут вводить в заблуждение, если они не смотрят на все ответы. Как сказано в ответах других людей, в API API уровня 11+ есть CalendarView. Благодаря! – vosmith

ответ

11

Является ли этот тип функциональности встроенным в любой вид или вид Android-виджета, или мне нужно будет разработать свой собственный компонент для этого?

Для этого в Android SDK нет компонентов, извините. Виджет, который вы показываете, слишком мал для сенсорного экрана. Вы можете реализовать что-то большее (см. Приложение «Календарь»), но для этого вы в значительной степени зависимы.

+1

Можете ли вы указать мне код приложения Календаря? –

+8

Можете ли вы предоставить ссылку на приложение «Календарь», которое вы упомянули в своем ответе. – Nishant

4

Я недавно написал именно это как модульное приложение. Вот некоторые sample code, documentation с screenshots и .apk download.

+0

Не могли бы вы рассказать мне, как реализовать плагин Calendar? нет информации о том, как установить его –

4

Найден хорошую реализация в http://caughtinthemobileweb.wordpress.com/2011/06/20/how-to-implement-calendarview-in-android/


Кроме того, поскольку уровень API-11 (Android 3.0) есть была собственная реализация C alendarView http://developer.android.com/reference/android/widget/CalendarView.html

+0

+1 для упоминания собственного выбора даты. Также есть DatePickerDialog: http://developer.android.com/reference/android/app/DatePickerDialog.html –

+0

, и вот отличный переписать без просмотра сетки: https://github.com/AtRow/CalendarView – Cfr

17

Сейчас, в 2014 году, даже родной DatePicker (link) содержит небольшой Холо ищет CalendarView (link) выбрать день в месяц.

Вы можете выбрать, если оба блесны и CalendarView или только один из них отображается с помощью установки:

  • android:calendarViewShown
  • android:spinnersShown

Я не уверен, если это просто уровень API 16+, или если это было даже в Ice Cream Sandwich, но оно есть. Вот как это выглядит по умолчанию:

enter image description here


Кроме того, на уровне API 21 и выше есть новый материал тематические DatePicker, который выглядит следующим образом:

enter image description here

Этот по умолчанию - по API 21+, и больше нет прядильщиков, но вы можете переключиться обратно на Холо, установив

android:datePickerMode="spinner" 

в вашем XML.

+1

Пробовал забава на ICS, выглядит как голо: – Zharf

+0

@anoniim, спасибо за подсказку datePickerMode! – user3855005

1

Попробуйте использовать этот компонент: https://github.com/truefedex/android-date-picker enter image description here

Если вы хотите использовать его как всплывающее окно записи на вашем OnClick:

if (calendarPopup == null) { 
    calendarPopup = new PopupWindow(getContext()); 
    CalendarPickerView calendarView = new CalendarPickerView(getContext()); 
    CalendarNumbersView calendar = (CalendarNumbersView) calendarView.findViewById(com.phlox.datepick.R.id.calendar); 
    calendar.setShowDayNames(false); 
    calendarView.setListener(onDateSelectionListener); 
    calendarPopup.setContentView(calendarView); 
    calendarPopup.setWindowLayoutMode(
     MeasureSpec.makeMeasureSpec(llCalendar.getWidth(), MeasureSpec.EXACTLY), 
     ViewGroup.LayoutParams.WRAP_CONTENT); 
    calendarPopup.setHeight(1); 
    calendarPopup.setWidth(llCalendar.getWidth()); 
    calendarPopup.setOutsideTouchable(true); 
} 
calendarPopup.showAsDropDown(llCalendar);