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.
- SetMaxDate () no funciona perfectamente en Lollipop 5.0.1 android y necesita una solución adecuada
- Limitación de fechas de Android DatePicker
- Selector de fecha con fecha predeterminada
- Cuadro de diálogo selector de fecha en editar texto haga doble clic
- DatePicker.OnDateChangedListener llamado dos veces
- Mostrar la selección del año primero en la vista del calendario de Android
- Diseño de material Android Inline Datepicker issue
- Cómo separar la actividad principal y el selector de fechas con las propias clases
- Cómo cambiar el color predeterminado del diálogo DatePicker y TimePicker en Android?
- Todavía puede seleccionar fechas deshabilitadas en el selector de fechas
- Implementar un DatePicker dentro de un fragmento
- ¿Cómo puedo configurar la fecha actual en un DatePicker?
- ¿Establecer límite en DatePickerDialog en Android?
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:
- Android 2.3 -> funciona (día girador se ha ido)
- 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?
- El oyente de presencia no trabaja en asmack
- ¿Cómo puedo configurar el valor alfa de una vista completa en el nivel 7 de api (Android 2.1)