Hướng dẫn và ví dụ Android DatePickerDialog
Xem thêm các chuyên mục:

Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.


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 DatePickerDialog và DatePicker, 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();

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();
}
}