Pregunta Cambiar el color del diálogo Datepicker para Android 5.0


¿Es posible cambiar el esquema de color datepicker (y también el timepicker) para Android 5.0?

He intentado configurar los colores de acento, pero esto no funciona (tanto con y sin 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 original: enter image description here

Para algo como esto: enter image description here


74
2018-02-26 08:59


origen


Respuestas:


La razón por la cual la sugerencia de Neil resulta en una pantalla completa DatePicker es la elección del tema principal:

<!-- Theme.AppCompat.Light is not a dialog theme -->
<style name="DialogTheme" parent="**Theme.AppCompat.Light**">
    <item name="colorAccent">@color/blue_500</item>
</style>

Además, si realiza esta ruta, debe especificar el tema al crear el 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();

Esto, en mi opinión, no es bueno. Uno debe intentar mantener el estilo fuera de java y dentro de styles.xml / themes.xml.

Estoy de acuerdo con la sugerencia de Neil, con un poco de cambio (cambiando el tema principal para decir, Theme.Material.Light.Dialog) obtendrá el resultado deseado. Pero, aquí está la otra forma:

En la primera inspección, nos encontramos datePickerStyle que define cosas tales como: headerBackground(lo que estás tratando de cambiar), dayOfWeekBackgroundy algunos otros text-colors y text-styles.

Anular este atributo en el tema de su aplicación no funcionará. DatePickerDialog utiliza un tema separado asignable por el atributo datePickerDialogTheme. Entonces, para que nuestros cambios tengan efecto, debemos anular datePickerStyle dentro de una anulación datePickerDialogTheme.

Aquí vamos:

Anular datePickerDialogTheme dentro del tema base de tu aplicación:

<style name="AppBaseTheme" parent="android:Theme.Material.Light">
    ....
    <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>

Definir MyDatePickerDialogTheme. La elección del tema principal dependerá del tema base de su aplicación: podría ser cualquiera Theme.Material.Dialog o Theme.Material.Light.Dialog:

<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
    <item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>

Hemos anulado datePickerStyle con el estilo MyDatePickerStyle. La elección del padre dependerá una vez más del tema base de su aplicación: cualquiera Widget.Material.DatePicker o Widget.Material.Light.DatePicker. Defínalo según tus requisitos:

<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
    <item name="android:headerBackground">@color/chosen_header_bg_color</item>
</style>

Actualmente, solo estamos anulando headerBackground que por defecto está configurado para ?attr/colorAccent (Esta es también la razón por la cual la sugerencia de Neil funciona al cambiar el fondo). Pero hay mucha personalización posible:

dayOfWeekBackground
dayOfWeekTextAppearance
headerMonthTextAppearance
headerDayOfMonthTextAppearance
headerYearTextAppearance
headerSelectedTextColor
yearListItemTextAppearance
yearListSelectorColor
calendarTextColor
calendarSelectedTextColor

Si no quiere este control (personalización), no necesita sobrescribir datePickerStyle. colorAccent controla la mayor parte de DatePicker's colores. Entonces, anulando solo colorAccent dentro MyDatePickerDialogTheme Deberia trabajar:

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

Primordial colorAccent le da el beneficio adicional de cambiar OK & CANCEL colores de texto también. No está mal.

De esta forma, no tiene que proporcionar ninguna información de estilo para DatePickerDialog's constructor. Todo ha sido conectado correctamente:

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

248
2018-03-12 15:56



Dale una oportunidad.

El código

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

El estilo En tu archivo styles.xml

EDITAR - Cambió el tema a Theme.AppCompat.Light.Dialog como se sugiere

<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@color/blue_500</item>
</style>

47
2018-02-26 09:18



Solo para mencionar, también puedes usar el tema por defecto como android.R.style.Theme_DeviceDefault_Light_Dialog en lugar.

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
2018-01-28 17:51



No tiene un tema de creación, solo escríbalo en su objeto de creación de diálogo

DatePickerDialog datePicker = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_LIGHT,this, mYear, mMonth, mDay);

sigue esto te dará todo tipo de estilo selector de fecha es realmente trabajo

http://www.android-examples.com/change-datepickerdialog-theme-in-android-using-dialogfragment/


1
2017-07-29 07:28



prueba esto, trabaja para mi

Pon las dos opciones, colorAccent y 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>

1
2018-03-20 19:46



Tuve el problema de que los botones del selector de tiempo no se habían visto en la pantalla de API 24 en Android. (API 21+) es resuelto por

<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
2018-05-23 17:04



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

0
2017-08-24 05:38



Para el color del texto del elemento de la lista de Año cambiante (ESPECÍFICO PARA ANDROID 5.0)

Simplemente configure cierto color de texto en el estilo de diálogo del selector de fecha. Por alguna razón, establecer bandera yearListItemTextAppearance no refleja ningún cambio en la lista de años.

<item name="android:textColor">@android:color/black</item>

0
2018-06-25 07:56