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" />