Eliminar el año de DatePickerDialog

Estoy usando el tutorial básico de DatePickerDialog de Android encontrado aquí Selector de fecha de Android

Y lo tengo trabajando. Pero sólo quiero poder elegir una fecha de este año. ¿Hay tan una manera de quitar el año del diálogo de modo que solamente se muestren el mes y el día? Cada vez que intento tomar el Año int, rompe el código.

Sí, es posible. DatePicker tiene el control NumberPicker incorporado tres, seguido por el año, mes, día, ocultar primero a.

final Calendar cal = Calendar.getInstance(); mDialog = new CustomerDatePickerDialog(getContext(), this, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)); mDialog.show(); DatePicker dp = findDatePicker((ViewGroup) mDialog.getWindow().getDecorView()); if (dp != null) { ((ViewGroup) dp.getChildAt(0)).getChildAt(0).setVisibility(View.GONE); } 

CustomerDatePickerDialog

 class CustomerDatePickerDialog extends DatePickerDialog { public CustomerDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { super(context, callBack, year, monthOfYear, dayOfMonth); } @Override public void onDateChanged(DatePicker view, int year, int month, int day) { super.onDateChanged(view, year, month, day); mDialog.setTitle((month + 1) + "-" + day + "-"); } } 

DatePicker :

 private DatePicker findDatePicker(ViewGroup group) { if (group != null) { for (int i = 0, j = group.getChildCount(); i < j; i++) { View child = group.getChildAt(i); if (child instanceof DatePicker) { return (DatePicker) child; } else if (child instanceof ViewGroup) { DatePicker result = findDatePicker((ViewGroup) child); if (result != null) return result; } } } return null; } 

Un trazador de líneas:

 getDatePicker().findViewById(Resources.getSystem().getIdentifier("year", "id", "android")).setVisibility(View.GONE); 

Mi problema es con el campo del año oculto, algún año tiene Feb29 y otros no. ¿Cómo me aseguro de que siempre me muestre Feb29? Recuerde que si se desplaza por los meses anteriores a diciembre, el año cambia a +1, por lo que no es útil ajustar el año a un año bisiesto.

No estoy seguro si ocultar al primer hijo es una buena idea. He probado esta solución:

  1. Android 2.3 -> funciona (día girador se ha ido)
  2. Android 4.0 -> no funciona porque hay un elemento más (calendario) y el primero de los hilanderos no es un día sino un mes.

Mejor solución podría ser modificar el código fuente de DatePicker a su propio paquete

Creo que esto es una implementación mucho mejor. También, considere el comentario de duskwuff sobre el OP. Esto puede hacer que los días no aparezcan correctamente.

selector de fechas

 <?xml version="1.0" encoding="utf-8"?> <DatePicker xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/datePickerNoYear" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

CustomDatePickerDialog.java

 public class DatePickerDialogNoYear extends DatePickerDialog { public DatePickerDialogNoYear(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { super(context, callBack, year, monthOfYear, dayOfMonth); hideYear(); } public DatePickerDialogNoYear(Context context, int theme, OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth) { super(context, theme, listener, year, monthOfYear, dayOfMonth); hideYear(); } @Override public void setView(View view, int viewSpacingLeft, int viewSpacingTop, int viewSpacingRight, int viewSpacingBottom) { view = findViewById(R.id.datePickerNoYear); super.setView(view, viewSpacingLeft, viewSpacingTop, viewSpacingRight, viewSpacingBottom); } private void hideYear() { try { Field f[] = this.getClass().getDeclaredFields(); for (Field field : f) { if (field.getName().equals("mYearPicker")) { field.setAccessible(true); ((View) field.get(this)).setVisibility(View.GONE); } } } catch (SecurityException | IllegalArgumentException | IllegalAccessException e) { Log.d("ERROR", e.getMessage()); } } } 

A continuación, sólo tiene que utilizar como cualquier otro DatePickerDialog . ¡Buena suerte!

En este hilo tienes una solución muy simple (más que la anterior), lo estoy intentando ahora y funciona bien.

Ocultar el campo Año en Android DatePicker?

  • Cambio del formato datepicker en android
  • La subclase SimpleDateFormat añade 1900 al año
  • Ocultar el campo Año en Android DatePicker?
  • DatePicker no funciona al intentar utilizarlo
  • SetMinDate () para DatePicker no funciona
  • ¿Cómo alimentar el widget de DatePicker con otros sistemas de calendario?
  • Desactivar fechas futuras en el selector de fechas de Android
  • Android, ¿hay alguna manera de desactivar la escritura dentro de un selector de fecha con el teclado?
  • Android DatePicker muestra meses no disponibles cuando se usan límites min / max
  • CalendarViewShown no está siendo reconocido en Android 5.0 Lollipop
  • Selector de fecha de Android con sólo día y mes
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.