Ocultar el campo Año en Android DatePicker?
Estoy utilizando un DatePicker básico y estoy tratando de averiguar cómo ocultar el campo Año en el DatePickerDialog para que sólo el mes y el día son visibles. No me importa que el código subyacente para el año todavía estaría allí, sólo me gustaría ocultar el campo de año en el cuadro de diálogo. Usted sabe con algo como:
((View) myYear).setVisibility(View.GONE);
Que sé que no funciona porque myYear es un int no una vista, pero algo a lo largo de esas líneas. ¿Es posible?
- Cambio del formato datepicker en android
- Obtener una marca de tiempo larga del selector de fechas onDateSet
- Establece los límites de fechas de datepicker de android
- ¿Cómo se utilizan los skins personalizados de Datepicker y Timepicker?
- Convertir la fecha y la hora en milisegundos en Android
- ¿Cómo alimentar el widget de DatePicker con otros sistemas de calendario?
- No se puede resolver el atributo desde el espacio de nombres android
- Cómo devolver el valor de la fecha de DatePickerDialog en Android?
- Java.lang.IllegalArgumentException: current debe ser> = start y <= end
- Cómo obtener la fecha del selector de fecha en android?
- Android: ¿Cómo diseñar el DatePicker?
- ¿Cómo hacer que un oyente para un botón de cancelar datepickers en Android?
- Datepicker y timepicker - establece valores máximos y mínimos en android
Una manera super fácil que encontré para implementar un DatePicker es llamarla en xml:
<DatePicker android:id="@+id/thePicker" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Y luego ocultar cualquier campo que desee (en este caso el año) en java:
picker = (DatePicker) findViewById(R.id.thePicker); try { Field f[] = picker.getClass().getDeclaredFields(); for (Field field : f) { if (field.getName().equals("mYearPicker")) { field.setAccessible(true); Object yearPicker = new Object(); yearPicker = field.get(picker); ((View) yearPicker).setVisibility(View.GONE); } } } catch (SecurityException e) { Log.d("ERROR", e.getMessage()); } catch (IllegalArgumentException e) { Log.d("ERROR", e.getMessage()); } catch (IllegalAccessException e) { Log.d("ERROR", e.getMessage()); }
Tenga mucho cuidado con esta solución. Está utilizando la reflexión para acceder a un campo y cambiar la visibilidad. ¡Esto no funcionará con Android 5.0! Google ha cambiado la implementación de TimePicker y DatePicker y las clases ya no exponen ningún campo appart del delegado.
Todavía no sé la solución para Android 5.0 +. Te avisaré en cuanto haya encontrado algo interesante.
Como idea, puedes usar la versión Build.VERSION.SDK_INT para comprobar la versión de Android y luego intentar acceder al DatePickerSpinnerDelegate con reflexion y establecer el campo que deseas.
Una vez más, esta no es la solución ideal, ya que Google es libre de cambiar esto una y otra vez …
Fácil manera de deshabilitar el campo Año en el selector de fecha
DatePicker dp = findDatePicker((ViewGroup) dialog.getWindow().getDecorView()); if(dp != null) { ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setEnabled(false); ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setAlpha(0.4f); }
Si desea eliminar el campo del año sólo setvisibility de la vista de resultado a View.GONE como a continuación
dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE) 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; }
He referido abajo el acoplamiento para la referencia Quitar año de DatePickerDialog
- No se puede llamar a runOnUiThread en un subproceso desde dentro de un servicio
- No se pudo obtener la propiedad desconocida 'compilar' para el objeto de tipo org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler