Руководство Android DatePicker

View more Tutorials:

1- Android DatePicker

Android DatePicker это компонент интерфейса, позволяющий пользователю выбрать дату (date) и гарантирует, чтобы введенные пользователем данные были действительными.
DatePicker имеет 2 режима (mode) с разными интерфейсами.
  1. android:datePickerMode="calendar"  (Default)
  2. android:datePickerMode="spinner"
DatePickerDialog позволяет пользователю выбрать действительную дату (date) и скрыть после выбора, помогает больше сэкономить пространство приложения по сравнению с использованием  DatePicker.

android:datePickerMode="calendar"

<DatePicker
    android:id="@+id/datePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:datePickerMode="calendar"  />
Portrait Screen
Landscape Screen

android:datePickerMode="spinner"

В режиме  spinner, DatePicker включает 2 части, слева это блок из 3-х  Spinner позволяющий пользователю выбрать месяц, день, год. И справа это более простой  CalendarView по сравнению с собой же в режиме  calendar.
<DatePicker
    android:id="@+id/datePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:datePickerMode="spinner" />
DatePicker [spinner mode] default.
Вы можете использовать  android :calendarViewShown ="false" чтобы скрыть компонент  CalendarView справа.
[android:calendarViewShown="false"]
<DatePicker
    android:id="@+id/datePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:calendarViewShown="false"
    android:datePickerMode="spinner" />
[android:calendarViewShown="false"]
Или можете использовать android:spinnersShown="false" чтобы скрыть блок (создержащий 3 Spinner) слева.
[android:spinnersShown="false"]
<DatePicker
    android:id="@+id/datePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:datePickerMode="spinner"
    android:spinnersShown="false" />
[android:spinnersShown="false"]
Android DatePicker Javadoc:

2- Пример DatePicker

Просмотр примера:
На  Android Studio создайте новый project:
  • File > New > New Project > Empty Activity
    • Name: DatePickerExample
    • Package name: org.o7planning.datepickerexample
    • Language: Java
DatePicker не имеется на  Palette окна дизайна, поэтому вам нужно использовать XML код чтобы добавить его в интерфейс и позже визуально настроить его положение и атрибуты.
DatePicker (Calendar Mode)
<DatePicker
    android:id="@+id/datePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:datePickerMode="calendar"  />
Настроить положение компонентов на интерфейсе:
Настроить  ID, Text для компонентов:
activity_main.xml
<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <DatePicker
        android:id="@+id/datePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:datePickerMode="calendar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:orientation="horizontal"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/datePicker">

        <EditText
            android:id="@+id/editText_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="dd-MM-yyyy"
            android:inputType="date" />

        <Button
            android:id="@+id/button_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Get Date" />
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package org.o7planning.datepickerexample;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

    private DatePicker datePicker;
    private EditText editTextDate;
    private Button buttonDate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.editTextDate = (EditText) this.findViewById(R.id.editText_date);
        this.buttonDate = (Button) this.findViewById(R.id.button_date);
        this.datePicker = (DatePicker) this.findViewById(R.id.datePicker);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        int year = calendar.get(Calendar.YEAR);
        int month  = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        this.datePicker.init( year, month , day , new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker datePicker, int year, int month, int dayOfMonth) {
                datePickerChange(  datePicker,   year,   month,   dayOfMonth);
            }
        });

        this.buttonDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showDate();
            }
        });
    }

    private void datePickerChange(DatePicker datePicker, int year, int month, int dayOfMonth) {
        Log.d("Date", "Year=" + year + " Month=" + (month + 1) + " day=" + dayOfMonth);
        this.editTextDate.setText(dayOfMonth +"-" + (month + 1) + "-" + year);
    }

    private void showDate()  {
        int year = this.datePicker.getYear();
        int month = this.datePicker.getMonth(); // 0 - 11
        int day = this.datePicker.getDayOfMonth();

        Toast.makeText(this, "Date: " + day+"-"+ (month + 1) +"-"+ year, Toast.LENGTH_LONG).show();
    }
}

View more Tutorials: