web-dev-qa-db-ja.com

Android日付ピッカーで特定の日付を無効にする

DatePickerを使用していますが、次のコードにより、今日の最後の日と30日後の最後の日を無効にできます。

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

毎月金曜日を無効にしたい場合、どうすればよいですか?

15
Emy Alsabbagh

このライブラリを使用できます Material Date Time Picker 、ここで、特定の日付を表示するオプションを設定できます。例:

datePicker.setSelectableDays(Calendar[] days)

そして、Calendarの配列を、選択可能なすべての日付を含むパラメーターとして渡します。

11
himanshu1496

カスタムDatePickerDialogを使用する

これをbuild.gradleに追加します

コンパイル 'com.wdullaer:materialdatetimepicker:3.5.1'

実装する

DatePickerDialog.OnDateSetListenerあなたのクラスに

そしてインポート

import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;の代わりに 'import Android.app.DatePickerDialog;'

このメソッドを追加します

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

}

showDatePicker()を呼び出します。

複数日

これを変える

     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);
    }
4
akash bs

Android datepickerでは不可能であり、自分でカスタムピッカーを作成する必要があります。 MaterialDateTimePicker を参照してください。

日曜日を無効にするには、このような配列を渡す必要があります

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

訪問 https://stackoverflow.com/a/44692231/6631959 最良の方法と理解しやすい...指定された日付を無効にする方法を探しているなら、より良いです。ループ手順ではありません。正確な日付を指定して無効にします。

コードはこちら::

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
Bharath

試すAndroid Material Date and Timepicker

ソース リンク

日曜日と土曜日を無効にしました。

enter image description here

setDisabledDays()メソッドを使用して特定の日付を無効にすることもできます

            //Disable all SUNDAYS and SATURDAYS between Min and Max Dates
            for (Calendar loopdate = min_date_c; min_date_c.before(max_date_c); min_date_c.add(Calendar.DATE, 1), loopdate = min_date_c) {
                int dayOfWeek = loopdate.get(Calendar.DAY_OF_WEEK);
                if (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY) {
                    Calendar[] disabledDays =  new Calendar[1];
                    disabledDays[0] = loopdate;
                    datePickerDialog.setDisabledDays(disabledDays);
                }
            }
0
Code Spy