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

  • Faire du carrousel avec ViewFlipper ou ViewPager
  • Comment tester le fichier d'extension sans publier l'application sur le marché Android
  • Arrêter la rotation de l'image après un degré de 360 ​​degrés
  • Problèmes avec ContactsContract.CommonDataKinds.StructuredName
  • Comment créer l'écran de chargement dans libgdx?
  • Y a-t-il un équivalent GCM équivalent au service iOS Push Notification Feedback?
  •  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; } } 

  • Erreur de précompilation Android sur 21.0.1 android sdk
  • Les noms d'hôte du navigateur Android ne sont pas résolus si le nom de domaine n'est pas ajouté
  • Qu'est-ce que ActionScript 3? Comment ça marche?
  • Caractères japonais ressemblant à chinois sur Android
  • AddToBackStack ne fonctionne pas, ferme l'activité au lieu de faire apparaître des fragments
  • Cordova - refuse d'exécuter le gestionnaire d'événements en ligne parce qu'il viole le contenu suivant Politique de sécurité
  • 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.