Est-il possible de changer la palette de couleurs datepicker (et également timepicker) pour Android 5.0?
J'ai essayé de définir les couleurs d'accent, mais cela ne fonctionne pas (avec et sans Android:
):
<!-- colorPrimary is used for the default action bar background -->
<item name="colorPrimary">@color/purple</item>
<!-- colorPrimaryDark is used for the status bar -->
<item name="colorPrimaryDark">@color/purple_tint</item>
<!-- colorAccent is used as the default value for colorControlActivated
which is used to tint widgets -->
<item name="colorAccent">@color/purple_tint</item>
De l'original:
Pour quelque chose comme ça:
La suggestion de Neil aboutit à un plein écran DatePicker
est le choix du thème parent:
<!-- Theme.AppCompat.Light is not a dialog theme -->
<style name="DialogTheme" parent="**Theme.AppCompat.Light**">
<item name="colorAccent">@color/blue_500</item>
</style>
De plus, si vous allez dans cette voie, vous devez spécifier le thème lors de la création de la 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 garder le style hors de Java et à l'intérieur de styles.xml/themes.xml.
Je suis d'accord que la suggestion de Neil, avec un peu de changement (changer le thème parent pour dire, Theme.Material.Light.Dialog
) vous obtiendrez le résultat souhaité. Mais, voici l'inverse:
Lors de la première inspection, nous rencontrons datePickerStyle
qui définit des éléments tels que: headerBackground
(ce que vous essayez de changer), dayOfWeekBackground
et quelques autres textes-couleurs et styles de texte.
Remplacer cet attribut dans le thème de votre application ne fonctionnera pas. DatePickerDialog
utilise un thème distinct pouvant être assigné par l'attribut datePickerDialogTheme
. Donc, pour que nos modifications prennent effet, nous devons remplacer datePickerStyle
dans un _ annulé datePickerDialogTheme
.
Et c'est parti:
Remplacez datePickerDialogTheme
dans le thème de base de votre application:
<style name="AppBaseTheme" parent="Android:Theme.Material.Light">
....
<item name="Android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>
Définissez 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
:
<style name="MyDatePickerDialogTheme" parent="Android:Theme.Material.Light.Dialog">
<item name="Android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>
Nous avons remplacé datePickerStyle
avec le style MyDatePickerStyle
. Le choix du parent dépendra à nouveau du thème de base de votre application: soit Widget.Material.DatePicker
ou Widget.Material.Light.DatePicker
. Définissez-le selon vos besoins:
<style name="MyDatePickerStyle" parent="@Android:style/Widget.Material.Light.DatePicker">
<item name="Android:headerBackground">@color/chosen_header_bg_color</item>
</style>
Actuellement, nous ne substituons que headerBackground
qui, par défaut, est défini sur ?attr/colorAccent
(c'est aussi pourquoi la suggestion de Neil fonctionne pour changer 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 autant de contrôle (personnalisation), vous n'avez pas besoin de remplacer datePickerStyle
. colorAccent
contrôle la plupart des couleurs DatePicker's
. Donc, remplacer colorAccent
à l'intérieur de MyDatePickerDialogTheme
devrait fonctionner:
<style name="MyDatePickerDialogTheme" parent="Android:Theme.Material.Light.Dialog">
<item name="Android:colorAccent">@color/date_picker_accent</item>
<!-- No need to override 'datePickerStyle' -->
<!-- <item name="Android:datePickerStyle">@style/MyDatePickerStyle</item> -->
</style>
Remplacer colorAccent
vous donne l’avantage supplémentaire de changer également les couleurs du texte OK
& CANCEL
. Pas mal.
De cette façon, vous n’avez pas à fournir d’informations de style au 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 - Thème changé en Theme.AppCompat.Light.Dialog comme suggéré
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="colorAccent">@color/blue_500</item>
</style>
Créer un nouveau style
<!-- Theme.AppCompat.Light.Dialog -->
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="colorAccent">@color/blue_500</item>
</style>
Code Java:
Le thème parent est la clé ici. Choisissez votre couleurAccent
DatePickerDialog = new DatePickerDialog(context,R.style.DialogTheme,this,now.get(Calendar.YEAR),now.get(Calendar.MONTH),now.get(Calendar.DAY_OF_MONTH);
Résultat:
essayez ceci, travaillez pour moi
Mettez les deux options, colorAccent
et Android:colorAccent
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
....
<item name="Android:dialogTheme">@style/AppTheme.DialogTheme</item>
<item name="Android:datePickerDialogTheme">@style/Dialog.Theme</item>
</style>
<style name="AppTheme.DialogTheme" parent="Theme.AppCompat.Light.Dialog">
<!-- Put the two options, colorAccent and Android:colorAccent. -->
<item name="colorAccent">@color/colorPrimary</item>
<item name="Android:colorPrimary">@color/colorPrimary</item>
<item name="Android:colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="Android:colorAccent">@color/colorPrimary</item>
</style>
Juste pour mentionner, vous pouvez aussi utiliser par défaut un thème comme Android.R.style.Theme_DeviceDefault_Light_Dialog
.
new DatePickerDialog(MainActivity.this, Android.R.style.Theme_DeviceDefault_Light_Dialog, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
//DO SOMETHING
}
}, 2015, 02, 26).show();
Vous n'avez pas créer de thème, il vous suffit de l'écrire dans votre objet de création de dialogue.
DatePickerDialog datePicker = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_LIGHT,this, mYear, mMonth, mDay);
suivez cela, il vous donnera tous les styles de type sélecteur de date, il est vraiment le travail
http://www.Android-examples.com/change-datepickerdialog-theme-in-Android-using-dialogfragment/
<style name="AppThemeDatePicker" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorAccent">@color/select2</item>
<item name="Android:colorAccent">@color/select2</item>
<item name="Android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>
<style name="MyDatePickerStyle" parent="@Android:style/Widget.Material.Light.DatePicker">
<item name="Android:headerBackground">@color/select2</item>
</style>
Pour changer la couleur du texte de l'élément de la liste Année (SPÉCIFIQUE POUR Android 5.0)
Il vous suffit de définir certaines couleurs de texte dans votre style de dialogue du sélecteur de date. Pour une raison quelconque, l'indicateur yearListItemTextAppearance
ne reflète aucun changement dans la liste des années.
<item name="Android:textColor">@Android:color/black</item>
J'ai eu le problème que les boutons de sélecteur de temps n'ont pas été vus dans l'écran pour API 24 dans Android. (API 21+) il est résolu par
<style name="MyDatePickerDialogTheme" parent="Android:Theme.Material.Light.Dialog">
<item name="Android:colorAccent">@color/colorPrimary2</item></style>
<style name="Theme" parent="BBaseTheme">
<item name="Android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>