Índice
En un proyecto reciente he tenido que trabajar con las librerías de compatibilidad de Android, en este caso para crear diálogos que permitan elegir fecha y hora, como estos:
En Android recomiendan usar un DialogFragment
, que permite mostrar éstos diálogos en distintos layouts. Si pretendes que tu aplicación soporte este tipo de diálogos para versiones inferiores a Android 3.0, debes usar el DialogFragment mencionado anteriormente, si por lo contrario tu aplicación usa un minSdkVersion igual o superior a 11, puedes usar este otro DialogFragment
. En este artículo se va a tratar la versión para soportar versiones anteriores a la 3.0.
Requisitos previos
Antes de empezar, es necesario descargar Support Library y agregarlas a nuestro proyecto Android (En eclipse, botón derecho en el proyecto ›› propiedades ›› Java Build Path ›› lib).
Otra forma de agregar la librería es hacer click derecho en el proyecto » Android Tools » Add support library.
Dicho esto, comencemos con el TimePickerDialog
Crear un TimePickerDialog
El primer paso es crear una clase fragment que herede de DialogFragment y devuelva un TimePickerDialog desde el método onCreateDialog() del fragment:
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.text.format.DateFormat;
import android.widget.TimePicker;
import java.util.Calendar;
public class TimePickerFragment extends DialogFragment implements
TimePickerDialog.OnTimeSetListener
{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
// Use the current time as the default values for the picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute)
{
}
}
Para cerciorarnos que se está usando la librería de compatibilidad, basta con ver el import android.support.v4.app.DialogFragment;
Por ahora dejaremos el método onTimeSet
vacío; pasemos a crear la interfaz. A modo de ejemplo, crearemos un botón que muestre el dialogo cuando sea pulsado:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="mostrarDialogoDeTiempo"
android:text="Diálogo de tiempo" />
Luego, creamos el método mostrarDialogoDeTiempo
que será llamado al pulsar el botón:
public void mostrarDialogoDeTiempo(View v) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getSupportFragmentManager(), "timePicker");
}
Llegados a este punto, es importante saber qué clase hemos de importar. Ya que el objetivo buscado es lograr compatibilidad entre las distintas versiones de android, para que la interfaz de la aplicación sea la misma en cualquier versión, la clase a importar es import android.support.v4.app.DialogFragment;
. De lo contrario, sería import android.app.DialogFragment;
Otro aspecto importante de cara a la compatibilidad, es la llamada a getSupportFragmentManager() y que nuestra actividad herede de FragmentActivity en lugar de Activity.
Para comprobar que funciona, lanzamos el emulador, en este caso, con la versión 2.3 de Android:
El proceso de creación de un DatePickerDialog es muy similar.
Crear un DatePickerDialog
Definimos la clase:
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.DatePicker;
import java.util.Calendar;
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
}
}
Al igual que antes, creamos un botón que muestre el diálogo:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="mostrarDialogoDeFecha"
android:text="Diálogo de fecha" />
He implementamos el método que responderá al pulsar el botón:
public void mostrarDialogoDeFecha(View v){
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
Así de simple, es similar a crear un timePickerDialog.
Referencias
- developer.android »» Visitar sitio
¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo o comentando abajo.