web-dev-qa-db-fra.com

Comment afficher le sélecteur de date pour Android avec uniquement les champs mois et année?

je souhaite désactiver l'option de sélection des jours sur le sélecteur de date Android sdk. toute configuration xml facile serait la meilleure

21
carbonr

Je viens de publier un nouveau cadre de sélection de date qui vous permet de créer un sélecteur de date personnalisé. J'ai également fourni des exemples de sélecteurs de date comme celui que vous recherchez. J'espère que cela fonctionne pour vous.

le code peut être trouvé ici: https://github.com/bendemboski/DateSlider

UPDATE 06/2014: Cette bibliothèque a été développée en 2010 et n'est plus entretenue depuis 2011. Elle est donc probablement obsolète.

16
Daniel

Il est possible de pirater l'instance DatePicker en utilisant la réflexion. De cette façon, vous pouvez accéder à l'instance NumberPicker qui représente le jour dans DatePicker:

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());
}
15
augustorsouza

En parlant de réflexion cela fonctionne dans Android 4.4.2 SDK

"mDaySpinner"

au lieu 

"mDayPicker"
3
blyabtroi

Je pense que c'est la meilleure solution

  datePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "Android")).setVisibility(View.GONE);
2
Bogdan Aksonenko

EDIT: selon le commentaire ci-dessous, je ne suivrais plus cette réponse.

Je ne pense pas que vous puissiez faire cela avec le sélecteur de date par défaut. Vous devrez le créer à partir d'éléments de base de l'interface utilisateur Android. Mais au lieu d’avoir cette difficulté, pourquoi ne pas utiliser un meilleur élément de bibliothèque, comme cette superbe roue iPhone-esque: http://code.google.com/p/Android-wheel/ Je n’ai pas utilisé encore, mais je prévois!

1
Nils

Cela fonctionne très bien dans la version 2.2. Mais le titre du dialogue n'est pas changé.

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
Luis E. Fernandez

Pour se cacher:

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

Et 

Pour cacher mois:

datePicker.findViewById(Resources.getSystem().getIdentifier("month", "id", "Android")).setVisibility(View.GONE);
0
Mayuresh Deshmukh

Vous pouvez utiliser le https://github.com/SimonVT/Android-datepicker widget pour la compatibilité avec le port précédent et rendre le sélecteur de jour 'parti'

<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"
        />
0
mspapant