2016-07-20 12 views
8

Po Lollipop, DatePicker ma bardzo piękny widok kalendarza, aby wybrać datę. Ale problemem jest wybór roku. Większość zwykłych ludzi ma kłopoty z wyborem roku. Po prostu przewijali. Przewijaj na lata zmienia się zbyt długo. Dlatego muszę najpierw wybrać rok, kiedy otworzy się okno Datepicker w systemie Android.Pokaż pierwszy wybór roku w widoku kalendarza na Androida Wyświetl

datepicker normalnie otwierając jak poniżej jednego:

enter image description here

Ale należy rozpocząć od wyboru roku. jak poniżej jednego:

enter image description here

+0

skorzystaj z tego linku https://github.com/wdullaer/MaterialDateTimePicker użyj tej metody showYearPickerFirst – iAndroid

+1

Dzięki. Pomyślnie dostałem z wtyczką MaterialDateTimePicker –

+1

Jest to taki typowy problem, otrzymuję kilka e-maili z obsługą techniczną co tydzień od użytkowników, którzy mówią mi, że wybór daty jest głupi, ponieważ muszą przewijać przez 40 lat. Począwszy od roku może to naprawić. Ale myślę, że to okno ma zły UX. – Zapnologica

Odpowiedz

3

Nie jest bardzo niezawodny sposób, aby to zrobić:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    DatePicker datePicker = (DatePicker) findViewById(R.id.test); 

    openYearView(datePicker); 
} 

private void openYearView(DatePicker datePicker) { 
    try { 
     Field mDelegateField = datePicker.getClass().getDeclaredField("mDelegate"); 
     mDelegateField.setAccessible(true); 
     Object delegate = mDelegateField.get(datePicker); 
     Method setCurrentViewMethod = delegate.getClass().getDeclaredMethod("setCurrentView", int.class); 
     setCurrentViewMethod.setAccessible(true); 
     setCurrentViewMethod.invoke(delegate, 1); 
    } catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { 
    } 
} 
+0

co z oknem wyboru daty? –

+0

@JohnSardinha użyj openYearView (dialog.getDatePicker()); przed wywołaniem dialog.show(); –

+0

Tak, działa to we wszystkich wersjach systemu operacyjnego. Metoda performClick() zepsuła się dla mnie na Marshmallow i poniżej. – andude

7

można uzyskać odniesienie do roku widoku, a następnie po prostu symulować kliknięcie użytkownika, aby go otworzyć.

dataPicker.getTouchables().get(0).performClick(); 

UPDATE: Jeśli nie wiadomo, opiszę każdym kroku. Najpierw musisz mieć referencję datePicker. Z referencją datePicker można uzyskać składniki datePicker za pomocą metody getTouchables(). Rok komponentu jest na pierwszym miejscu, więc trzeba zadzwonić .get (0), aby uzyskać odniesienie do roku. A potem wystarczy zasymulować użytkownika, aby otworzyć widok lat na początku, zamiast czekać na kliknięcie.

+0

Dokładniej z czym dokładnie? Jeśli nie jest jasne, wyjaśnię każdy krok. Najpierw musi mieć odwołanie do datePicker. Z referencją datePicker może uzyskać składniki datePicker za pomocą metody getTouchables(). Rok komponentu jest na pierwszym miejscu, więc trzeba wywołać get (0), aby uzyskać odniesienie do niego. A potem wystarczy zasymulować kliknięcie myszą, aby otworzyć rok na początku, zamiast czekać na kliknięcie. –

+0

Ok, zrobiłem. Mam nadzieję, że teraz jest jasne. –

+2

To jest największe obejście, które znalazłem w ciągu 6 lat na Androida. Niesamowite! – andude