2012-05-01 19 views
13

Estoy usando un DatePicker básico y estoy intentando descubrir cómo ocultar el campo Year en DatePickerDialog para que solo el mes y el día sean visibles. No me importa que el código subyacente del año todavía esté allí, solo me gustaría ocultar el campo Año en el cuadro de diálogo. Usted sabe con algo como:Ocultar campo de año en Android DatePicker?

((View) myYear).setVisibility(View.GONE); 

que sé que no funciona porque no es un myYear int una vista, pero algo por el estilo. ¿Es posible?

+0

http://code.google.com/p/android-wheel/ ver este enlace. que le ayudará a ... – MAC

Respuesta

22

Una forma muy fácil que he encontrado 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()); 
    } 
+12

Puede reemplazar 'if (field.getName() ("iguales") mYearPicker.) {' ' con si (field.getName() iguales ("mYearPicker"). | | field.getName(). equals ("mYearSpinner")) {' para dar cuenta del widget DatePicker en Honeycomb y versiones superiores de Android ... –

+2

para los últimos Androids, también ocultar" mCalendarView " – YKS

8

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 están exponiendo ningún campo aparte del delegado.

No conozco la solución aún para Android 5.0 +. Te avisaré tan pronto como encuentre algo interesante.

Como una idea, podría usar Build.VERSION.SDK_INT para verificar la versión de Android y luego tratar de acceder al DatePickerSpinnerDelegate usando reflexión y establecer el campo que desea.

Una vez más, esto no es la solución ideal como Google son libres de cambiar una y otra vez ...

+0

¿cuál es la solución para Android 5.0+? – RDD

+0

Nunca encontré ninguna buena solución. Para nuestro proyecto, simplemente utilicé el DatePicker proporcionado con la selección del año ... También puede ver este https://android-arsenal.com/tag/27. Puede ser útil si está buscando una biblioteca DatePicker personalizable. – rontho

+1

Creé un componente personalizado siguiendo [this] (http://stackoverflow.com/questions/21321789/android-datepicker-change-to-only-month-and-year) y obtuve lo que quería. – RDD

1

Una forma sencilla de desactivar el campo de Año en el selector de fechas

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 campo de año sólo setvisibility de vista de resultados 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 a continuación enlace de referencia Remove year from DatePickerDialog

+0

bloqueos en Android 7 - Intento de invocar el método virtual 'void android.view.View.setVisibility (int)' en una referencia de objeto nulo –

1

Puede ajustar la gama del año mediante el uso de esta función

datePicker.setYearRange(1950,2017); 
Cuestiones relacionadas