Hướng dẫn sử dụng Android DatePickerDialog

Xem thêm các chuyên mục:

1- Android DatePickerDialog

Android DatePickerDialog đặt một DatePicker trên một Dialog, nó cho phép người dùng lựa chọn một ngày tháng (Date). Về cơ bản không có sự khác biệt đáng kể về việc sử dụng giữa DatePickerDialogDatePicker, nếu bạn muốn tiết kiệm không gian của ứng dụng hãy sử dụng DatePickerDialog.
DatePickerDialog được tạo ra trong thời gian chạy của ứng dụng, khi mà người dùng cần nó để chọn một ngày tháng (Date). Bạn có thể tạo và hiển thị nó bằng mã Java:
DatePickerDialog (Calendar Mode) (Default)
int selectedYear = 2000;
int selectedMonth = 5;
int selectedDayOfMonth = 10;

// Date Select Listener.
DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int year,
                          int monthOfYear, int dayOfMonth) {

        editTextDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);
    }
};

// Create DatePickerDialog (Spinner Mode):
DatePickerDialog datePickerDialog = new DatePickerDialog(this,
            dateSetListener, selectedYear, selectedMonth, selectedDayOfMonth);

// Show
datePickerDialog.show();
 
DatePickerDialog (Spinner Mode)
int selectedYear = 2000;
int selectedMonth = 5;
int selectedDayOfMonth = 10;

// Date Select Listener.
DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int year,
                          int monthOfYear, int dayOfMonth) {

        editTextDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);
    }
};

// Create DatePickerDialog (Spinner Mode):
DatePickerDialog datePickerDialog = new DatePickerDialog(this,
            android.R.style.Theme_Holo_Light_Dialog_NoActionBar,
            dateSetListener, selectedYear, selectedMonth, selectedDayOfMonth);

// Show
datePickerDialog.show();

2- Ví dụ DatePickerDialog

Xem trước ví dụ:
Calendar Mode
Spinner Mode
Trên Android Studio tạo mới một project:
  • File > New > New Project > Empty Activity
    • Name: DatePickerDialogExample
    • Package name: org.o7planning.datepickerdialogexample
    • Language: Java
Giao diện của ứng dụng:
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">

    <EditText
        android:id="@+id/editText_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="90dp"
        android:ems="10"
        android:inputType="date"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="90dp"
        android:text="Select Date"
        app:layout_constraintStart_toEndOf="@+id/editText_date"
        app:layout_constraintTop_toTopOf="parent" />

    <CheckBox
        android:id="@+id/checkBox_isSpinnerMode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:text="Spinner Mode?"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText_date" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package org.o7planning.datepickerdialogexample;

import androidx.appcompat.app.AppCompatActivity;

import android.app.DatePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.DatePicker;
import android.widget.EditText;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

    private EditText editTextDate;
    private Button buttonDate;
    private CheckBox checkBoxIsSpinnerMode;

    private int lastSelectedYear;
    private int lastSelectedMonth;
    private int lastSelectedDayOfMonth;

    @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.checkBoxIsSpinnerMode = this.findViewById(R.id.checkBox_isSpinnerMode);

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

        // Get Current Date
        final Calendar c = Calendar.getInstance();
        this.lastSelectedYear = c.get(Calendar.YEAR);
        this.lastSelectedMonth = c.get(Calendar.MONTH);
        this.lastSelectedDayOfMonth = c.get(Calendar.DAY_OF_MONTH);
    }

    // User click on 'Select Date' button.
    private void buttonSelectDate() {
        final boolean isSpinnerMode = this.checkBoxIsSpinnerMode.isChecked();

        // Date Select Listener.
        DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker view, int year,
                                  int monthOfYear, int dayOfMonth) {

                editTextDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);

                lastSelectedYear = year;
                lastSelectedMonth = monthOfYear;
                lastSelectedDayOfMonth = dayOfMonth;
            }
        };

        DatePickerDialog datePickerDialog = null;

        if(isSpinnerMode)  {
            // Create DatePickerDialog:
            datePickerDialog = new DatePickerDialog(this,
                    android.R.style.Theme_Holo_Light_Dialog_NoActionBar,
                    dateSetListener, lastSelectedYear, lastSelectedMonth, lastSelectedDayOfMonth);
        }
        // Calendar Mode (Default):
        else {
            datePickerDialog = new DatePickerDialog(this,
                    dateSetListener, lastSelectedYear, lastSelectedMonth, lastSelectedDayOfMonth);
        }

        // Show
        datePickerDialog.show();
    }
}

Xem thêm các chuyên mục: