2016-02-24 10 views
9

Używam DatePicker i mogę wyłączyć ostatnie dni dzisiaj i późniejszych dniach po 30 dniach według następującego kodu:wyłączyć konkretne terminy dzień w dacie Android kompletacji

DatePickerDialog datePicker = new DatePickerDialog(); 

      Calendar calender = Calendar.getInstance(); 
      long today = calender.getTimeInMillis(); 
      final long oneDay = 24 * 60 * 60 * 1000L; 

      Date previousDays = new Date(today - 1000); 
      datePicker.setMinDate(DateToCalendar(previousDays)); 

      Date nextMonth = new Date(today + 30 * oneDay); 
      datePicker.setMaxDate(DateToCalendar(nextMonth)); 

Jeśli chcę wyłączyć piątek każdego miesiąca, jak mogę to zrobić?

Odpowiedz

5

Możesz użyć tej biblioteki Material Date Time Picker, tutaj można ustawić opcję, aby pokazać konkretnych dat, na przykład:

datePicker.setSelectableDays(Calendar[] days) 

I przekazać tablicę Calendar jako parametr, który zawiera wszystkie selekcyjny datę.

+1

Dzięki tak dużo, to działa świetnie. Domyślam się, że standardowy android jest tak ograniczony. – Zapnologica

+0

Jak przekazać dni w bibliotece wspomnianej powyżej, aby wyłączyć? Załóżmy, jak wyłączyć wszystkie weekendy? – prateek31

+0

Utwórz tablicę dat, która nie obejmuje weekendów i przekaż ją jako daty do wyboru. – himanshu1496

4

To nie jest możliwe w androidowym zbiorze danych i musisz samodzielnie utworzyć własny selektor. Zobacz MaterialDateTimePicker

Aby wyłączyć niedziele trzeba przekazać tablicę jak ten

 GregorianCalendar g1=new GregorianCalendar(); 
     g1.add(Calendar.DATE, 1); 
     GregorianCalendar gc = new GregorianCalendar(); 
     gc.add(Calendar.DAY_OF_MONTH, 30); 
     List<Calendar> dayslist= new LinkedList<Calendar>(); 
Calendar[] daysArray; 
Calendar cAux = Calendar.getInstance(); 
while (cAux.getTimeInMillis() <= gc.getTimeInMillis()) { 
    if (cAux.get(Calendar.DAY_OF_WEEK) != 1) { 
     Calendar c = Calendar.getInstance(); 
     c.setTimeInMillis(cAux.getTimeInMillis()); 
     dayslist.add(c); 
    } 
    cAux.setTimeInMillis(cAux.getTimeInMillis() + (24*60*60*1000)); 
} 
daysArray = new Calendar[dayslist.size()]; 
for (int i = 0; i<daysArray.length;i++) 
{ 
    daysArray[i]=dayslist.get(i); 
} 
datePickerDialog.setSelectableDays(daysArray); 
+3

Użyj Calendar.SUNDAY zamiast 1 – dilix

+0

co to jest gc w twoim kodzie? –

+0

Co to jest gc w swoim kodzie? –

2

Odwiedź https://stackoverflow.com/a/44692231/6631959 najlepsza metoda i łatwe do zrozumienia ... jeśli u szukasz jak wyłączyć określoną datę to jest lepszy. Brak procedury pętli. podając dokładną datę i wyłączając ją.

Kod jest tutaj ::

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); 
        String a = "26-07-2017"; 
        java.util.Date date = null; 
        try { 
         date = sdf.parse(a); 
         MainActivity obj = new MainActivity(); 
         calendar = obj.dateToCalendar(date); 
         System.out.println(calendar.getTime()); 
        } catch (ParseException e) { 
         e.printStackTrace(); 
        } 

        List<Calendar> dates = new ArrayList<>(); 
        dates.add(calendar); 
        Calendar[] disabledDays1 = dates.toArray(new Calendar[dates.size()]); 
        dpd.setDisabledDays(disabledDays1); 
    private Calendar dateToCalendar(Date date) { 
      Calendar calendar = Calendar.getInstance(); 
      calendar.setTime(date); 
      return calendar; 
     } 
2

Wykorzystanie niestandardowych DatePickerDialog

dodać to w build.gradle

kompilacji 'com.wdullaer: materialdatetimepicker: 3.5.1'

wdrożenia

DatePickerDialog.OnDateSetListener do klasy

i importować

import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; zamiast "import android.app.DatePickerDialog; '

i dodać tę metodę

private void showDatePicker() { 

    Calendar calendar = Calendar.getInstance(); 

    DatePickerDialog dpd = DatePickerDialog.newInstance(
      this, 
      calendar.get(Calendar.YEAR), 
      calendar.get(Calendar.MONTH), 
      calendar.get(Calendar.DAY_OF_MONTH) 
    ); 
    dpd.show(getActivity().getFragmentManager(), "DatePickerDialog"); 

    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); 
    String a = "07-03-2018"; // example 

    java.util.Date date = null; 

    try { 
     date = sdf.parse(a); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    calendar = dateToCalendar(date); 
    System.out.println(calendar.getTime()); 

    List<Calendar> dates = new ArrayList<>(); 
    dates.add(calendar); 
    Calendar[] disabledDays1 = dates.toArray(new Calendar[dates.size()]); 
    dpd.setDisabledDays(disabledDays1); 

} 

    private Calendar dateToCalendar(Date date) { 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTime(date); 
     return calendar; 
    } 




@Override 
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) { 

    String date = dayOfMonth+"/"+(monthOfYear+1)+"/"+year; 
    textview.setText(date); 

} 

rozmowę showDatePicker().

przez wiele dni

to zmienić

 String[] holidays = {"07-03-2018","05-03-2018","10-03-2018"}; 

    java.util.Date date = null; 

    for (int i = 0;i < holidays.length; i++) { 

     try { 
      date = sdf.parse(holidays[i]); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     calendar = dateToCalendar(date); 
     System.out.println(calendar.getTime()); 

     List<Calendar> dates = new ArrayList<>(); 
     dates.add(calendar); 
     Calendar[] disabledDays1 = dates.toArray(new Calendar[dates.size()]); 
     dpd.setDisabledDays(disabledDays1); 
    }