2010-11-08 8 views
20

quiero desactivar la opción de selección de día en el selector de fecha sdk de Android. cualquier configuración xml fácil sería la mejor¿Cómo se muestra el selector de fecha para Android con solo campos de mes y año?

+0

¿Has probado algo? ¿Has buscado una solución usando un motor de búsqueda? – Patrick

+1

lo hice de hecho y encontré que la gente decía que era imposible, lo cual no es cierto, pero no tengo una idea clara sobre cómo seguir adelante con esto, pero es posible. gracias – carbonr

Respuesta

16

Acabo de lanzar un nuevo marco selector de fecha que le permite crear selector de fecha personalizado. También proporcioné ejemplos de selectores de fecha como el que está buscando. Espero que te sirva.

el código se puede encontrar aquí: https://github.com/bendemboski/DateSlider

ACTUALIZACIÓN 06/2014: Esta biblioteca fue desarrollado 2010 y ha dejado de mantenerse desde 2011. Por lo tanto, es más probable fuera de fecha por ahora.

+2

El selector de fecha personalizado es impresionante –

+0

Oh las alegrías de mantener una página de Wordpress ... Actualicé el enlace al repositorio de GitHub – Daniel

+0

¿Sigue siendo relevante? ¿podrías actualizar el proyecto para que sea compatible con gradle y android studio? – deej

1

EDITAR: según el comentario a continuación, ya no seguiría esta respuesta.

No creo que pueda hacer eso con el selector de fecha predeterminado. Tendrás que crearlo a partir de los elementos básicos de la interfaz de usuario de Android. Pero en lugar de ir a ese problema, ¿por qué no utilizar un mejor elemento de biblioteca como esta genial rueda de estilo iPhone? http://code.google.com/p/android-wheel/ ¡No lo he usado todavía, pero pienso hacerlo!

+9

Esto no fue un mal consejo en enero de 2011, pero si estás leyendo esto ahora, te recomendaría no usar una biblioteca que imite a iOS. A Google no le gusta eso: http://developer.android.com/design/patterns/pure-android.html – theelfismike

+1

A los usuarios tampoco les gusta eso – Roel

15

Es posible hackear la instancia de DatePicker mediante reflexión. De esta manera, usted es capaz de acceder a la instancia NumberPicker que representan el día en el Selector de fechas:

datePicker = (DatePicker) findViewById(R.id.expiration_date); 
try { 
    Field f[] = datePicker.getClass().getDeclaredFields(); 
    for (Field field : f) { 
     if (field.getName().equals("mDayPicker")) { 
      field.setAccessible(true); 
      Object dayPicker = new Object(); 
      dayPicker = field.get(datePicker); 
      ((View) dayPicker).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()); 
} 
+0

Esto funcionó para mí. Tenga en cuenta que tuve que cambiar mDayPicker a mDaySpinner. No estoy seguro de qué nivel de API presentó este cambio, pero ahora estoy compilando para Android 4.0.3. – Setzer22

+1

Esto puede estar roto en Android 5.0 y más alto porque el DatePicker ya no usa esos selectores de números. – Roel

+0

En Android 6, los campos son mDelegate, LOG_TAG, MODE_CALENDAR, MODE_SPINNER. La solución no funciona para mí. –

0

Esto funciona bien en la versión 2.2. Pero el título del diálogo no se cambia.

for (Field datePickerDialogField : datePickerDialogFields) {   

    if (datePickerDialogField.getName().equals("mDatePicker")) { 
     datePickerDialogField.setAccessible(true); 
     DatePicker datePicker = (DatePicker) datePickerDialogField.get(datePickerDialog); 

     Field datePickerFields[] = datePickerDialogField.getType().getDeclaredFields(); 

     for (Field datePickerField : datePickerFields) { 

      if ("mDayPicker".equals(datePickerField.getName())) { 
       datePickerField.setAccessible(true); 
       Object dayPicker = new Object(); 
       dayPicker = datePickerField.get(datePicker); 
       ((View) dayPicker).setVisibility(View.GONE); 
      } 
     } 
    } 
} 
0

Usted puede utilizar el widget https://github.com/SimonVT/android-datepicker para la compatibilidad portado y hacer el día selector 'ido'

<net.simonvt.numberpicker.NumberPicker 
     android:id="@+id/day" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="16dip" 
     android:layout_marginRight="16dip" 
     android:focusable="true" 
     android:focusableInTouchMode="true" 
     android:visibility="gone" 
     /> 
3

Hablando de reflexión que esto funciona en Android 4.4.2 SDK

"mDaySpinner" 

vez

"mDayPicker" 
2

Creo que es la mejor solución

datePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); 
Cuestiones relacionadas