2016-02-24 10 views
9

Ich bin mit dem Datepicker und ich kann letzten Tage von heute und später Tagen nach 30 Tagen deaktivieren, indem Sie den folgenden Code: Freitagdeaktivieren ein bestimmtes Datum des Tages im Android Datumsauswahl

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

Wenn ich will, deaktivieren von jedem Monat, wie kann ich das tun?

Antwort

5

können Sie diese Bibliothek verwenden Material Date Time Picker, hier können Sie eine Option festlegen, spezifische Daten zu zeigen, zum Beispiel:

datePicker.setSelectableDays(Calendar[] days) 

Und passieren Array von Calendar als Parameter, die alle wählbaren Datum enthält.

+1

Vielen Dank, das funktioniert großartig. Ich dono warum der Standard-Android ist so begrenzt. – Zapnologica

+0

Wie die Tage in der oben genannten Bibliothek zu deaktivieren? Angenommen, wie alle Wochenenden deaktiviert werden? – prateek31

+0

Erstellen Sie ein Datenfeld, das keine Wochenenden enthält, und übergeben Sie es als auswählbare Daten. – himanshu1496

4

Das ist nicht möglich mit dem Androiden Datepicker und Sie müssen einen benutzerdefinierten Picker für sich selbst erstellen. Siehe MaterialDateTimePicker

Sonntag So deaktivieren Sie das Array wie diese

 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

Verwenden Sie Calendar.SUNDAY statt 1 – dilix

+0

Was ist GC in Ihrem Code? –

+0

Was ist GC in Ihrem Code? –

2

Besuche https://stackoverflow.com/a/44692231/6631959 beste Methode zu übergeben haben und leicht zu verstehen ... wenn u für die Suche, wie man ein bestimmtes Datum deaktivieren ist besser. kein Looping-Verfahren. Geben Sie ein genaues Datum an und deaktivieren Sie es.

Der Code ist hier ::

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

Use custom DatePickerDialog

dieses Add in build.gradle

Kompilierung 'com.wdullaer: materialdatetimepicker: 3.5.1'

implementieren

DatePickerDialog.OnDateSetListener Ihrer Klasse

und importieren

Import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; anstelle von 'import android.app.DatePickerDialog;'

und fügen diese Methode

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

} 

Anruf showDatePicker().

für mehrere Tage

Ändern Sie diese

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