DatePicker представляет элемент для выбора даты. Среди его атрибутов можно отметить следующие:
android:calendarTextColor: цвет текста календаря
android:calendarViewShown: указывает, будет ли отображаться вид календаря
android:datePickerMode: устанавливает режим выбора даты
android:dayOfWeekBackground: устанавливает фоновый цвет панели выбора дня недели
android:endYear: устанавливает последний отображаемый год
android:firstDayOfWeek: устанавливает первый день недели
android:headerBackground: устанавливает фоновый цвет для панели выбранной даты
android:maxDate: устанавливает максимальную отображаемую дату в формате mm/dd/yyyy
android:minDate: устанавливает минимальную отображаемую дату в формате mm/dd/yyyy
android:spinnersShown: указывает, будет ли отображаться спиннер в виджете
android:startYear: устанавливает начальный отображаемый год
android:yearListSelectorColor: устанавливает цвет для поля выбора года
Среди методов DatePicker можно отметить следующие:
int getDayOfMonth(): возвращает номер выбранного дня
int getMonth(): возвращает номер выбранного месяца (от 0 до 11)
int getYear()(): возвращает номер выбранного года
void init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener):
устанавливает начальную дату. Последний параметр устанавливает слушатель изменения выбранной даты
void setOnDateChangedListener(DatePicker.OnDateChangedListener onDateChangedListener): устанавливает слушатель изменения выбранной даты
void setFirstDayOfWeek(int firstDayOfWeek): устанавливает первый день недели
void updateDate(int year, int month, int dayOfMonth): программно обновляет выбранную дату
Пусть в activity_main.xml определен элемент DatePicker:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<TextView android:id="@+id/dateTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="26sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<DatePicker android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dateTextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
Применим некоторые методы DatePicker для управления его поведением:
package com.example.viewapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.DatePicker;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView dateTextView = findViewById(R.id.dateTextView);
DatePicker datePicker = this.findViewById(R.id.datePicker);
// Месяц начиная с нуля. Для отображения добавляем 1.
datePicker.init(2020, 02, 01, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// Отсчет месяцев начинается с нуля. Для отображения добавляем 1.
dateTextView.setText("Дата: " + view.getDayOfMonth() + "/" +
(view.getMonth() + 1) + "/" + view.getYear());
// альтернативная запись
// dateTextView.setText("Дата: " + dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
}
});
}
}
Используя метод datePicker.init(); устанавливаем дату по умолчанию - 1 марта 2020 года, так как отсчет месяцев идет с нуля.
Кроме того, с помощью последнего параметра - объекта DatePicker.OnDateChangedListener устанавливается обработка выбора даты. Каждый раз, когда пользователь
будет выбирать дату, будет срабатывать метод onDateChanged() объекта DatePicker.OnDateChangedListener. Этот метод принимает
четыре параметра - view (элемент DatePicker), year (выбранный год), monthOfYear (выбранный месяц), dayOfMonth (выбранный день).
Далее мы можем получить выбранные день, месяц и год. Причем для можно использовать как параметры метода onDateChanged, так и методы самого DatePicker
Начальное состояние перед выбором - установлена дата 1 марта 2020 года.
Выбор произвольной даты (20 мая 2020 года):
DatePicker по умолчанию отображается в режиме календаря, но мы можем использовать добавить другой режим - спиннер с помощью атрибута android:datePickerMode:
<DatePicker android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="spinner"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dateTextView" />
В данном случае спиннер отображается слева от календаря. Если мы вовсе не хотим отображать календаря, то можно установить атрибут android:calendarViewShown="false"
<DatePicker android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="spinner"
android:calendarViewShown="false"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dateTextView" />