Изменение цвета диалогового окна 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>