2010-09-14 12 views
30

Piszę swoją pierwszą aplikację i mam pytanie dotyczące DatePicker.Widok kalendarza Androida dla selektora dat

Moja aplikacja wymaga wprowadzenia daty. Najbardziej przyjazny dla użytkownika sposób byłoby popup widget kalendarza podobny wyświetlający bieżący miesiąc jak siatce kalendarza - mniej więcej tak:

enter image description here

chcę użyć że zamiast interfejsu DatePicker - z polami Miesiąc, Dzień i Rok, z których każdy zawiera przycisk zwiększania/zmniejszania w celu zwiększenia/zmniejszenia.

Czy ten typ funkcji jest wbudowany w dowolny widget lub widok Androida, czy też musiałbym zaprojektować własny komponent niestandardowy, aby to zrobić? Pomyślałem, że to już będzie istniało, widząc, jak bardzo ten typ interfejsu jest używany tak często w aplikacjach i witrynach innych niż mobilne.

Dzięki!

+0

Czy możesz zaktualizować wybraną odpowiedź do tego zadania jon? Ludzie mogą wprowadzać w błąd, jeśli nie patrzą na wszystkie odpowiedzi. Jak stwierdzono w odpowiedziach innych osób, istnieje CalendarView na poziomie API 11+. Dzięki! – vosmith

Odpowiedz

11

Czy ten typ funkcji jest wbudowany w dowolny widget lub widok Androida, czy też musiałbym zaprojektować własny niestandardowy komponent>, aby to zrobić?

Nie ma w tym komponencie dla systemu Android SDK, przepraszam. Widżet, który zilustrowałeś, jest za mały na ekran dotykowy. Możesz zaimplementować coś większego (zobacz aplikację Kalendarz), ale w dużej mierze jesteś na to sam.

+1

Czy możesz wskazać mi kod aplikacji Kalendarz? –

+8

Czy możesz podać link do aplikacji Kalendarza, o której wspomniałeś w odpowiedzi .. – Nishant

4

Znaleziony dobrą implementacja w http://caughtinthemobileweb.wordpress.com/2011/06/20/how-to-implement-calendarview-in-android/


także Ponieważ poziom API 11 (Android 3.0) istnieje była natywną implementacją C alendarView http://developer.android.com/reference/android/widget/CalendarView.html

+0

+1 za wymienienie natywnego selektora dat. Istnieje również DatePickerDialog: http://developer.android.com/reference/android/app/DatePickerDialog.html –

+0

i tutaj jest świetne przepisanie bez widoku siatki: https://github.com/AtRow/CalendarView – Cfr

17

Teraz, w 2014 roku, nawet rodzimy DatePicker (link) zawiera małe Holo patrząc CalendarView (link) wybrać dzień w miesiącu.

Można wybrać, czy oba błystki i CalendarView lub tylko jeden z nich jest wyświetlany przez ustawienie:

  • android:calendarViewShown
  • android:spinnersShown

Nie jestem pewien, czy jest to po prostu poziom API 16+ lub nawet w Ice Cream Sandwich, ale jest. Jak to wygląda domyślnie:

enter image description here


Ponadto na poziomie API 21 i wyższy jest nowy materiał tematycznie DatePicker który wygląda jak następuje:

enter image description here

ten jest domyślnie w API 21+ i nie ma już spinnerów, ale możesz przełączyć się z powrotem na Holo, ustawiając

android:datePickerMode="spinner" 

w swoim XML.

+1

Wypróbowałem dla zabawa na ICS, wygląda jak holo – Zharf

+0

@anoniim, dziękuję za wskazówkę datePickerMode! – user3855005

1

spróbuje użyć tego składnika: https://github.com/truefedex/android-date-picker enter image description here

Jeśli chcesz używać go jak podręcznego zapisu na 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);