2010-09-14 23 views
30

Estoy escribiendo mi primera aplicación, y tengo una pregunta acerca de DatePicker.Android Calendar View for Date Picker

Mi aplicación requiere que el usuario ingrese una fecha. La forma más fácil de usar sería popup un widget de calendario similar al que muestra el mes actual como una cuadrícula del calendario - algo como esto:

enter image description here

quiero usar que en lugar de la interfaz DatePicker - que tiene los campos Mes, Día y Año, cada uno con un botón hacia arriba y hacia abajo para incrementar/disminuir.

¿Este tipo de funcionalidad está integrada en cualquier widget o vista de Android, o tendré que diseñar mi propio componente personalizado para hacer esto? Pensé que esto ya existiría, ya que este tipo de UI se usa con tanta frecuencia en aplicaciones y aplicaciones que no son móviles.

Gracias!

+0

Podría actualizar la respuesta seleccionada a esta búsqueda ¿ion? Las personas pueden ser engañadas si no miran todas las respuestas. Según lo manifestado por las respuestas de otras personas, hay un CalendarView en el nivel API 11+. ¡Gracias! – vosmith

Respuesta

11

¿Este tipo de funcionalidad está integrada en cualquier widget o vista de Android, o tendría que diseñar mi propio componente personalizado para hacer esto?

No hay ningún componente para eso en el SDK de Android, lo siento. El widget que ilustras es demasiado pequeño para una pantalla táctil. Puedes implementar algo más grande (mira la aplicación Calendario), pero en gran medida estás solo para eso.

+1

¿me puede indicar el Código de aplicación de calendario? –

+8

¿Puede proporcionar el enlace a la aplicación de calendario que ha mencionado en su respuesta? – Nishant

4

encontró una buena Implementación en http://caughtinthemobileweb.wordpress.com/2011/06/20/how-to-implement-calendarview-in-android/


También desde el nivel API 11 (Android 3.0) hay ha sido la implementación nativa de la C alendarView http://developer.android.com/reference/android/widget/CalendarView.html

+0

+1 por mencionar el selector de fecha nativo. También está el DatePickerDialog: http://developer.android.com/reference/android/app/DatePickerDialog.html –

+0

y aquí hay una gran reescritura sin vista de cuadrícula: https://github.com/AtRow/CalendarView – Cfr

17

Ahora, en 2014, aunque el nativo DatePicker (link) contiene pequeñas mirando Holo CalendarView (link) para elegir un día en el mes.

Se puede elegir, si ambos hiladores y CalendarView o sólo uno de ellos se muestra mediante el establecimiento de:

  • android:calendarViewShown
  • android:spinnersShown

no estoy seguro si es sólo nivel de la API 16+ o si fue incluso en Ice Cream Sandwich, pero está allí. Se trata de cómo se ve por defecto:

enter image description here


Por otra parte, el nivel de la API 21 y superiores, existe un nuevo material temático DatePicker que se parece a lo siguiente:

enter image description here

Este está predeterminado en API 21+ y ya no hay hilanderos, pero puede volver al Holo configurando

android:datePickerMode="spinner" 

en su XML.

+1

Lo probó para ¡Diversión en ICS, parece holo – Zharf

+0

@anoniim, gracias por la sugerencia datePickerMode! – user3855005

1

Intente utilizar este componente: https://github.com/truefedex/android-date-picker enter image description here

Si desea utilizarlo como emergente de escritura en su 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);