web-dev-qa-db-fra.com

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

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: enter image description here

Pour quelque chose comme ça: enter image description here

98
Warpzit

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();
290
Vikram

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>
55
Neil

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:

enter image description here

6
Siddharth Jaswal

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>
6

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();
3
user1214120

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/

1
Avinash Ajay Pandey
<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>
1
Keshav Gera

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>
0
user3354265

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>
0
Samet ÖZTOPRAK