2016-02-24 22 views
9

sto usando il DatePicker e posso disabilitare ultimi giorni di oggi e di giorni più tardi dopo 30 giorni dal codice seguente:Disabilita date specifiche del giorno in data Android selettore

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)); 

Se voglio disabilitare Venerdì di ogni mese, come posso fare questo?

risposta

5

È possibile utilizzare questa libreria Material Date Time Picker, qui è possibile impostare un'opzione per mostrare date specifiche, per esempio:

datePicker.setSelectableDays(Calendar[] days) 

E passare serie di Calendar come un parametro che contiene tutte le informazioni selezionabile.

+1

Grazie mille, questa grande opera. Mi do il motivo per cui l'Android standard è così limitato. – Zapnologica

+0

Come passare i giorni nella libreria di cui sopra per disabilitare? Supponiamo come disabilitare tutti i fine settimana? – prateek31

+0

Creare un array di date che non include i fine settimana e passarlo come date selezionabili. – himanshu1496

4

Questo non è possibile con Android DatePicker ed è necessario creare un selettore personalizzato per te. Vedere MaterialDateTimePicker

Per disabilitare la domenica si deve passare la matrice come questo

 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

Usa Calendar.SUNDAY invece di 1 – dilix

+0

cosa c'è gc nel tuo codice? –

+0

Che cos'è gc nel tuo codice? –

2

Visita https://stackoverflow.com/a/44692231/6631959 metodo migliore e facile da capire ... se u cercate: come disabilitare una data specifica è meglio. non una procedura di loop. dando qualsiasi data esatta e disabilitandola.

Il codice è qui ::

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

Usa personalizzato DatePickerDialog

aggiungere questo in build.gradle

compilazione 'com.wdullaer: materialdatetimepicker: 3.5.1'

implementare

DatePickerDialog.OnDateSetListener alla classe

e importare

import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; anziché 'import android.app.DatePickerDialog;'

e aggiungere questo metodo

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); 

} 

chiamata showDatePicker().

per più giorni

cambiare questo

 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); 
    }