Changer la couleur de la boîte de dialog Datepicker pour Android 5.0

Est-il possible de changer le jeu de couleurs datepicker (et aussi le timepicker) pour Android 5.0?

J’ai essayé de définir les couleurs d’accent, mais cela ne fonctionne pas (à la fois avec et sans android: :

  @color/purple  @color/purple_tint  @color/purple_tint 

De l’original: entrer la description de l'image ici

À quelque chose comme ça: entrer la description de l'image ici

La raison pour laquelle la suggestion de Neil est un DatePicker plein écran est le choix du thème parent:

   

De plus, si vous allez dans cette voie, vous devez spécifier le thème lors de la création du DatePickerDialog :

 // R.style.DialogTheme new DatePickerDialog(MainActivity.this, R.style.DialogTheme, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { //DO SOMETHING } }, 2015, 02, 26).show(); 

Ceci, à mon avis, n’est pas bon. On devrait essayer de ne pas utiliser Java et dans styles.xml / themes.xml.

Je suis d’accord que la suggestion de Neil, avec un peu de changement (changer le thème parent à dire, Theme.Material.Light.Dialog ) vous donnera le résultat souhaité. Mais voici l’autre moyen:

Lors de la première inspection, nous rencontrons datePickerStyle qui définit des éléments tels que: headerBackground (ce que vous essayez de modifier), dayOfWeekBackground et quelques autres couleurs de texte et styles de texte.

Le remplacement de cet atsortingbut dans le thème de votre application ne fonctionnera pas. DatePickerDialog utilise un thème distinct assignable par l’atsortingbut datePickerDialogTheme . Donc, pour que nos modifications prennent effet, nous devons remplacer datePickerStyle dans une date de remplacement de datePickerDialogTheme .

Et c’est parti:

Remplacez datePickerDialogTheme intérieur du thème de base de votre application:

  

Définir MyDatePickerDialogTheme . Le choix du thème parent dépendra du thème de base de votre application: il peut s’agir de Theme.Material.Dialog ou de Theme.Material.Light.Dialog :

  

Nous avons remplacé datePickerStyle par le style MyDatePickerStyle . Le choix du parent dépendra encore une fois du thème de base de votre application: Widget.Material.DatePicker ou Widget.Material.Light.DatePicker . Définissez-le selon vos besoins:

  

Actuellement, nous ne headerBackground que headerBackground qui, par défaut, est défini sur ?attr/colorAccent (c’est également pour cette raison que Neil suggère de modifier l’arrière-plan). Mais il y a beaucoup de personnalisation possible:

 dayOfWeekBackground dayOfWeekTextAppearance headerMonthTextAppearance headerDayOfMonthTextAppearance headerYearTextAppearance headerSelectedTextColor yearListItemTextAppearance yearListSelectorColor calendarTextColor calendarSelectedTextColor 

Si vous ne voulez pas trop de contrôle (personnalisation), vous n’avez pas besoin de remplacer datePickerStyle . colorAccent contrôle la plupart des couleurs DatePicker's . Ainsi, colorAccent uniquement colorAccent dans MyDatePickerDialogTheme devrait fonctionner:

  

Le colorAccent vous offre l’avantage supplémentaire de modifier également les couleurs de texte OK et CANCEL . Pas mal.

De cette façon, vous ne devez fournir aucune information de DatePickerDialog's constructeur DatePickerDialog's . Tout a été câblé correctement:

 DatePickerDialog dpd = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { } }, 2015, 5, 22); dpd.show(); 

Essayez ceci.

Le code

 new DatePickerDialog(MainActivity.this, R.style.DialogTheme, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { //DO SOMETHING } }, 2015, 02, 26).show(); 

Le style dans votre fichier styles.xml

EDIT – Changement de thème pour Theme.AppCompat.Light.Dialog comme suggéré