Отключить конкретные даты дня в Android date picker
Я использую 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));
Если я хочу отключить пятницу каждого месяца, как я могу это сделать?
Ответы
Ответ 1
Вы можете использовать эту библиотеку Material Date Time Picker, здесь вы можете установить опцию для отображения конкретных дат, например:
datePicker.setSelectableDays(Calendar[] days)
И передать массив Calendar
в качестве параметра, который содержит всю выбираемую дату.
Ответ 2
Это невозможно с помощью 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);
Ответ 3
Использовать пользовательскую DatePickerDialog
добавьте это в build.gradle
compile '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
Посетите fooobar.com/questions/721970/... Лучший способ и легко понять... если вы ищете, как отключить указанную дату, это лучше. а не цикл. давая точную дату и отключая ее.
Код: HEre ::
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;
}
Ответ 5
Попробуйте Android Материал Дата и 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);
}
}