¿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 (con y sin android:
:
@color/purple @color/purple_tint @color/purple_tint
De original:
Para algo como esto:
La razón por la cual la sugerencia de Neil resulta en un DatePicker
pantalla completa es la elección del tema principal:
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 en que 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 con datePickerStyle
que define cosas como: headerBackground
(lo que está intentando cambiar), dayOfWeekBackground
y algunos otros text-colors y text-styles.
Anular este atributo en el tema de su aplicación no funcionará. DatePickerDialog
usa un tema separado asignable por el atributo datePickerDialogTheme
. Entonces, para que nuestros cambios surtan efecto, debemos anular datePickerStyle
dentro de una datePickerDialogTheme
.
Aquí vamos:
Anular datePickerDialogTheme
dentro del tema base de su aplicación:
Defina MyDatePickerDialogTheme
. La elección del tema principal dependerá del tema base de su aplicación: podría ser Theme.Material.Dialog
o Theme.Material.Light.Dialog
:
Hemos reemplazado datePickerStyle
con el estilo MyDatePickerStyle
. La elección del padre dependerá una vez más del tema base de su aplicación: Widget.Material.DatePicker
o Widget.Material.Light.DatePicker
. Defínalo según tus requisitos:
Actualmente, solo estamos reemplazando headerBackground
que por defecto está configurado en ?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 desea este control (personalización), no necesita anular datePickerStyle
. colorAccent
controla la mayoría de los colores DatePicker's
. Por lo tanto, anulando simplemente colorAccent
dentro de MyDatePickerDialogTheme
debería funcionar:
Anulación de colorAccent
le brinda la ventaja adicional de cambiar los colores de texto OK
y CANCEL
también. No está mal.
De esta forma, no tiene que proporcionar ninguna información de estilo al constructor DatePickerDialog's
. 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();
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
Solo para mencionar, también puedes usar el tema predeterminado, como 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();
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 de selector de fecha, es realmente trabajo
http://www.android-examples.com/change-datepickerdialog-theme-in-android-using-dialogfragment/
prueba esto, trabaja para mi
Pon las dos opciones, colorAccent
y android:colorAccent
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+) se resuelve por
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 algún motivo, la configuración del indicador yearListItemTextAppearance
no refleja ningún cambio en la lista anual.
- @android:color/black