Изменение цвета диалогового окна Datepicker для Android 5.0
можно ли изменить цветовую схему datepicker (а также timepicker) для android 5.0?
Я попытался установить цвета акцента, но это не работает (как с так и без 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>
из оригинала:
что-то вроде этого:
8 ответов:
причина, по которой предложение Нила приводит к полноэкранному режиму
DatePicker
- это выбор родителей тема:<!-- Theme.AppCompat.Light is not a dialog theme --> <style name="DialogTheme" parent="**Theme.AppCompat.Light**"> <item name="colorAccent">@color/blue_500</item> </style>
кроме того, если вы идете по этому маршруту, вы должны указать тему при создании
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();
это, на мой взгляд, нехорошо. Следует попытаться сохранить стиль из java и внутренних стилей.xml / темы.XML.
я согласен, что предложение Нила, с небольшим изменением (изменение родительской темы, чтобы сказать,
Theme.Material.Light.Dialog
) будет вы получите желаемый результат. Но, вот другой путь:при первом осмотре, мы сталкиваемся
datePickerStyle
, который определяет такие вещи, как:headerBackground
(что вы пытаетесь изменить),dayOfWeekBackground
, и несколько других текстовых цветов и текстовых стилей.переопределение этого атрибута в теме вашего приложения не будет работать.
DatePickerDialog
использует отдельную тему, назначаемую атрибутомdatePickerDialogTheme
. Итак, чтобы наши изменения вступили в силу, мы должны переопределитьdatePickerStyle
внутри дваdatePickerDialogTheme
.вот так:
переопределить
datePickerDialogTheme
внутри базовой темы приложения:<style name="AppBaseTheme" parent="android:Theme.Material.Light"> .... <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item> </style>
определение
MyDatePickerDialogTheme
. Выбор родительской темы будет зависеть от базовой темы вашего приложения: это может быть либоTheme.Material.Dialog
илиTheme.Material.Light.Dialog
:<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog"> <item name="android:datePickerStyle">@style/MyDatePickerStyle</item> </style>
мы переопределили
datePickerStyle
стильMyDatePickerStyle
. Выбор родителя будет еще раз зависеть от того, что является базовой темой вашего приложения: либоWidget.Material.DatePicker
илиWidget.Material.Light.DatePicker
. Определите его согласно вашему требования:<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker"> <item name="android:headerBackground">@color/chosen_header_bg_color</item> </style>
в настоящее время, мы только переопределение
headerBackground
который по умолчанию установлен в?attr/colorAccent
(это также почему предложение Нила работает в изменении фона). Но есть довольно много возможностей настройки:dayOfWeekBackground dayOfWeekTextAppearance headerMonthTextAppearance headerDayOfMonthTextAppearance headerYearTextAppearance headerSelectedTextColor yearListItemTextAppearance yearListSelectorColor calendarTextColor calendarSelectedTextColor
если вы не хотите столько контроля (настройки), вам не нужно переопределять
datePickerStyle
.colorAccent
контролирует большую частьDatePicker's
цвета. Итак, переопределение простоcolorAccent
внутриMyDatePickerDialogTheme
должны работа:<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>
переопределение
colorAccent
дает вам дополнительное преимущество изменятьOK
&CANCEL
цвета текста, а также. Не плохо.таким образом, вам не нужно предоставлять информацию о стиле
DatePickerDialog's
конструктор. Все было подключено правильно: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();
дайте это попробовать.
код
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();
Стиль в своем стили.xml-файл
изменить-изменить тему на тему.Совместимости приложений.Свет.Диалог в соответствии с предложением
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog"> <item name="colorAccent">@color/blue_500</item> </style>
просто чтобы упомянуть, вы также можете использовать по умолчанию тему, как
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();
у вас нет создать тему просто напишите его в диалоговом окне создание объекта
DatePickerDialog datePicker = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_LIGHT,this, mYear, mMonth, mDay);
следуйте этому он даст вам все тип даты выбора стиля это действительно работа
http://www.android-examples.com/change-datepickerdialog-theme-in-android-using-dialogfragment/
попробуйте это, работать на меня
поставьте два варианта,
colorAccent
и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>
У меня была проблема, что кнопки выбора времени не были замечены на экране для API 24 в android. (API 21+) это решается с помощью
<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>
<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>
для изменения цвета текста элемента списка год (специально для ANDROID 5.0)
просто установите определенный цвет текста в вашем стиле диалога выбора даты. Почему-то установка флага
yearListItemTextAppearance
не отражает никаких изменений в списке год.<item name="android:textColor">@android:color/black</item>