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

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>