Boîte de dialogue DatePicker sans visualisation du calendrier dans lollipop ?

J'ai lu la documentation: http://developer.android.com/guide/topics/ui/controls/pickers.html mais maintenant dans lollipop apparaît le calendrier (il est correct pour un événement mais horrible pour définir une date de naissance, I Serait un mode spinner.) Et je ne peux pas l'enlever! Dans la mise en page C'est facile avec cette propriété:

<DatePicker datePickerMode="spinner"...> 

Mais du code de DatePickerDialog si j'essaie de définir

 dialogDatePicker.getDatePicker().setSpinnersShown(true); dialogDatePicker.getDatePicker().setCalendarViewShown(false); 

Ces propriétés ne fonctionnent pas et le calendrier continue d'apparaître!

 public static class MyDatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener { int pYear; int pDay; int pMonth; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the current date as the default date in the picker final Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); DatePickerDialog dialogDatePicker = new DatePickerDialog(getActivity(), this, year, month, day); dialogDatePicker.getDatePicker().setSpinnersShown(true); dialogDatePicker.getDatePicker().setCalendarViewShown(false); return dialogDatePicker; // Create a new instance of DatePickerDialog and return it //return new DatePickerDialog(getActivity(), this, year, month, day); } public void onDateSet(DatePicker view, int year, int month, int day) { pYear = year; pDay = day; pMonth = month; } } 

  • Custom DatePicker
  • Android DatePicker montre les mois indisponibles lors de l'utilisation des limites min / max
  • Définir les limites de date de date de départ Android
  • Conception de matériel Android Inline Datepicker issue
  • Comment désactiver les dates futures dans le sélectionneur de date Android
  • Sélecteur de date Android avec seulement Jour et Mois
  • DataPicker ressemble à un ancien design sur de nouvelles API
  • Hide Year field dans Android DatePicker?
  • 7 Solutions collect form web for “Boîte de dialogue DatePicker sans visualisation du calendrier dans lollipop ?”

    DatePickerDialog utilise le thème de dialogue spécifié par votre thème d'activité. Il s'agit d'un thème entièrement spécifié, ce qui signifie que vous devez re-spécifier tous les attributs – tels que le style de sélection de date – que vous avez définis dans votre thème d'activité.

     <style name="MyAppTheme" parent="android:Theme.Material"> <item name="android:dialogTheme">@style/MyDialogTheme</item> <item name="android:datePickerStyle">@style/MyDatePicker</item> </style> <style name="MyDialogTheme" parent="android:Theme.Material.Dialog"> <item name="android:datePickerStyle">@style/MyDatePicker</item> </style> <style name="MyDatePicker" parent="android:Widget.Material.DatePicker"> <item name="android:datePickerMode">spinner</item> </style> 

    Remarque: En raison du problème 222208 , cela ne fonctionnera pas dans Android N / API 24. Il a déjà été corrigé dans la plate-forme pour la prochaine version. Il n'y a pas de solution de rechange disponible pour les périphériques API 24.

    Appliquer le Holo_theme dans le niveau de code a fonctionné pour moi.

     new DatePickerDialog(getActivity(),android.R.style.Theme_Holo_Dialog,this, year,month, day); 

    Je pense que la meilleure solution à ce problème est de définir un nouveau style dans le fichier XML, puis de l'utiliser par programmation dans le code.

    Bien que la réponse @alanv soit parfaite et fonctionnera correctement, le problème est qu'il sera appliqué à tous les sélecteurs de date. Supposons que vous ayez un DatePicker où vous devez afficher la vue Calendrier, et un autre DatePicker où vous devez afficher la vue du spinner, cela ne fonctionnera pas.

    Définissez donc un nouveau style dans un styles.xml. Créez ce fichier dans un dossier nommé values-v21 (voir la structure de dénomination ici ), car ces attributs sont introduits après le lollipop uniquement. Avant la sucette, il n'y avait que le mode spinner.

      <style name="CustomDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog"> <item name="android:datePickerStyle">@style/MyDatePickerStyle</item> </style> <style name="MyDatePickerStyle" parent="@android:style/Widget.Material.DatePicker"> <item name="android:datePickerMode">spinner</item> </style> 

    Et enfin, utilisez-le dans le code comme celui-ci

     DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), R.style.CustomDatePickerDialogTheme, this, year, month, day); return datePickerDialog; 

    Pouvez-vous essayer ceci

     DatePickerDialog dialogDatePicker = new DatePickerDialog(getActivity(), this, year, month, day); dialogDatePicker.getDatePicker().setCalendarViewShown(false); return dialogDatePicker; 

    Enlèvement

     dialogDatePicker.getDatePicker().setSpinnersShown(true); 

    Toutes les choses fantastiques, utilisez le constructeur DatePickerDialog qui prend un paramètre "int theme". Sans cela, il semble que le jeu par défaut soit celui qui s'inscrit dans le mode CalendarView. Avec de petits nombres entiers (0, 1, 2, 3 …), il vous donnera un spinner (au moins dans mon application API 19 exécutée sur un émulateur). Essentiellement, essayez New DatePickerDialog (getContext (), 0, this, year, month, day) Notez le 0 (ou 1, ou 2, etc.) là-bas

    Attention: Je ne suis pas sûr d'avoir une liste quelque part des champs de thème statique, et d'utiliser un «0» codé en dur au lieu de «Theme.HOLO_LIGHT» ou tout ce qui pourrait différer les différents appareils, mais cela fonctionne de quelque façon que ce soit.

    Ajoutez l'attribut calendarViewShown et définissez-le sur false:

     <DatePicker android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/date_field" android:calendarViewShown="false"/> 

    Essayez cela, cela fonctionnait pour moi, faites un daylistener personnalisé:

      @SuppressWarnings("deprecation") public void setDate(View view) { showDialog(999); } @SuppressWarnings("deprecation") protected Dialog onCreateDialog(int id) { // TODO Auto-generated method stub if (id == 999) { return new DatePickerDialog(this, myDateListener, year, month-1, day); } return null; } //THIS private DatePickerDialog.OnDateSetListener myDateListener= new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) { showDate(arg1, arg2+1, arg3); } }; private void showDate(int year, int month, int day) { //dateView.setText(new StringBuilder().append(day).append("-") // .append(month).append("-").append(year)); } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.