DatePicker
DatePicker представляє елемент для вибору дати. Серед його атрибутів можна відзначити наступні:
android:calendarTextColor: колір тексту календаряandroid:calendarViewShown: вказує, чи буде відображатися вигляд календаряandroid:datePickerMode: встановлює режим вибору датиandroid:dayOfWeekBackground: встановлює фоновий колір панелі вибору дня тижняandroid:endYear: встановлює останній відображений рікandroid:firstDayOfWeek: встановлює перший день тижняandroid:headerBackground: встановлює фоновий колір для панелі вибраної датиandroid:maxDate: встановлює максимальну відображену дату у форматі mm/dd/yyyyandroid:minDate: встановлює мінімальну відображену дату у форматі mm/dd/yyyyandroid: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.gradlet(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.gradlet();, встановлюємо дату за замовчуванням — 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" />

