En este artículo, vamos a deshabilitar fechas anteriores o futuras en Datepicker. La mayoría de las veces, cuando usamos DatePicker en Android, vemos que toda la fecha está habilitada. Podemos seleccionar cualquiera de las fechas. Pero aquí vamos a ver cómo deshabilitar fechas pasadas o futuras. Deshabilitar la fecha pasada puede ser útil cuando estamos asignando tareas a alguien. Entonces la fecha seleccionada debe ser en el futuro. Deshabilitar la Fecha anterior puede ser útil cuando estamos preguntando por la fecha de nacimiento de alguien. Entonces la fecha seleccionada debe estar en el pasado. Implementemos esta función.
Implementación paso a paso
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.
Paso 2: trabajar con el archivo activity_main.xml
Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo activity_main.xml .
XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" tools:context=".MainActivity"> <EditText android:id="@+id/editext" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
Paso 3: trabajar con el archivo MainActivity.java
Vaya al archivo MainActivity.java y consulte el siguiente código.
Para la fecha máxima:
Obtenga DatePicker de DatePickerDialog con getDatePicker() . Establezca la fecha máxima en la fecha actual con setMaxDate() :
Nota: Requiere API nivel 11.
datePicker.getDatePicker().setMaxDate(calendar.getTimeInMillis());
A continuación se muestra el código del archivo MainActivity.java .
Java
import android.app.DatePickerDialog; import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.EditText; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import java.util.Calendar; public class MainActivity extends AppCompatActivity { EditText editText; DatePickerDialog datePicker; @RequiresApi(api = Build.VERSION_CODES.N) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // initialising the calendar final Calendar calendar = Calendar.getInstance(); // initialising the layout editText = findViewById(R.id.editext); final int day = calendar.get(Calendar.DAY_OF_MONTH); final int year = calendar.get(Calendar.YEAR); final int month = calendar.get(Calendar.MONTH); // initialising the datepickerdialog datePicker = new DatePickerDialog(MainActivity.this); // click on edittext to set the value editText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { datePicker = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(android.widget.DatePicker view, int year, int month, int dayOfMonth) { // adding the selected date in the edittext editText.setText(dayOfMonth + "/" + (month + 1) + "/" + year); } }, year, month, day); // set maximum date to be selected as today datePicker.getDatePicker().setMaxDate(calendar.getTimeInMillis()); // show the dialog datePicker.show(); } }); } }
Para la fecha mínima:
Del mismo modo, obtenga DatePicker de DatePickerDialog con getDatePicker() . Establezca la fecha mínima en la fecha actual con setMinDate() :
datePicker.getDatePicker().setMinDate(calendar.getTimeInMillis());
A continuación se muestra el código del archivo MainActivity.java .
Java
import android.app.DatePickerDialog; import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.EditText; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import java.util.Calendar; public class MainActivity extends AppCompatActivity { EditText editText; DatePickerDialog datePicker; @RequiresApi(api = Build.VERSION_CODES.N) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // initialising the calendar final Calendar calendar = Calendar.getInstance(); // initialising the layout editText = findViewById(R.id.editext); final int day = calendar.get(Calendar.DAY_OF_MONTH); final int year = calendar.get(Calendar.YEAR); final int month = calendar.get(Calendar.MONTH); // initialising the datepickerdialog datePicker = new DatePickerDialog(MainActivity.this); // click on edittext to set the value editText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { datePicker = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(android.widget.DatePicker view, int year, int month, int dayOfMonth) { // adding the selected date in the edittext editText.setText(dayOfMonth + "/" + (month + 1) + "/" + year); } }, year, month, day); // set maximum date to be selected as today datePicker.getDatePicker().setMinDate(calendar.getTimeInMillis()); // show the dialog datePicker.show(); } }); } }
Producción: