Проблемы и недостатки в использовании Android родной date and time picker
.
- Настройка достаточно сложна , чтобы никогда не захотеть тратить часы на сборщик дат.
- Пользовательский интерфейс выбора даты и таймера может отличаться в
pre lollipop
и lollipop
устройстве. (Я упоминаю это)
Решение
Я всегда использую библиотеку MaterialDateTimePicker , чтобы избавиться от этой проблемы. Эта библиотека с широкими возможностями настройки, хорошо поддерживается репо.
Я передаю вам свой код базового класса активности, который вы можете добавить в свой базовый класс активности или создать новый.
Вы расширите свой класс деятельности этим базовым классом. и просто вызовите простой метод, который я написал.
openTimeDialog(Calendar.getInstance(), new OnTimeSelected() {
@Override
public void onTimeSet(Calendar timeCalendar) {
}
});
BaseProject.java
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.util.Calendar;
/**
* Created by KHEMRAJ on 8/1/2017.
*/
public class BaseProject extends Activity {
public interface OnDateSelected {
void onDateSet(Calendar dateCalendar);
}
public interface OnTimeSelected {
void onTimeSet(Calendar timeCalendar);
}
public void openDateDialog(OnDateSelected onDateSelected) {
openDateDialog(Calendar.getInstance(), null, null, onDateSelected);
}
public void openDateDialog(@NonNull Calendar preSelectedCalendar, final OnDateSelected onDateSelected) {
openDateDialog(preSelectedCalendar, null, null, onDateSelected);
}
public void openDateDialog(@NonNull Calendar preSelectedCalendar, @Nullable Calendar minDateCalander, final OnDateSelected onDateSelected) {
openDateDialog(preSelectedCalendar, minDateCalander, null, onDateSelected);
}
public void openDateDialog(@NonNull Calendar preSelectedCalendar, @Nullable Calendar minDateCalander, @Nullable Calendar maxDateCalander, final OnDateSelected onDateSelected) {
DatePickerDialog dpd = DatePickerDialog.newInstance(
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, monthOfYear);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
if (onDateSelected != null) onDateSelected.onDateSet(calendar);
}
},
preSelectedCalendar.get(Calendar.YEAR),
preSelectedCalendar.get(Calendar.MONTH),
preSelectedCalendar.get(Calendar.DAY_OF_MONTH)
);
if (minDateCalander != null)
dpd.setMinDate(minDateCalander);
if (maxDateCalander != null)
dpd.setMaxDate(maxDateCalander);
dpd.show(getFragmentManager(), "Datepickerdialog");
}
public void openTimeDialog(@NonNull Calendar preSelectedCalendar, final OnTimeSelected onTimeSelected) {
TimePickerDialog timePickerDialog = TimePickerDialog.newInstance(
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePickerDialog view, int hourOfDay, int minute, int second) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
if (onTimeSelected != null) onTimeSelected.onTimeSet(calendar);
}
},
preSelectedCalendar.get(Calendar.HOUR_OF_DAY),
preSelectedCalendar.get(Calendar.MINUTE),
false);
timePickerDialog.show(getFragmentManager(), "TimePickerDialog");
}
}
Добавить эту зависимость
compile 'com.wdullaer:materialdatetimepicker:3.6.0'
Вы можете изменить цвета шрифта, цвета фона, цвета текста даты и времени, как описано в ссылка