Как изменить цвет фона DatePickerDialog с белого по умолчанию?

Я пытаюсь установить стиль темной темы для DatePickerDialog в Android. Согласно ответу Викрама здесь, я не хотите установить стиль в DatePickerDilog's конструкторе.

Я установил следующие стили, и они установлены, но не применяются к панели кнопок «ОК» и «Отмена» в портретном режиме. Тем не менее, это работает в альбомной ориентации!!:

Мой v21/styles.xml:

<style name="AppTheme.Dark.NoActionBar">
     <item name="windowActionBar">false</item>
     <item name="windowNoTitle">true</item>
     <item name="android:windowDrawsSystemBarBackgrounds">true</item>
     <item name="android:statusBarColor">@color/primaryColorDark_dark</item>
     <item name="android:datePickerDialogTheme">@style/DatePicker_Theme_Dark</item>
</style>
<!--Dark DatePicker Theme & style-->
<style name="DatePicker_Theme_Dark" parent="android:Theme.Material.Light.Dialog">
    <item name="android:datePickerStyle">@style/DatePicker_Dark</item>
</style>
<style name="DatePicker_Dark" parent="@android:style/Widget.Material.Light.DatePicker">
    <item name="colorAccent">@color/colorAccent_dark</item>
    <item name="android:background">@color/primaryColor_dark</item>
    <item name="android:headerBackground">@color/colorAccent_dark</item>
    <item name="android:textColorPrimary">@color/textPrimaryColor_dark</item>
    <item name="android:textColorSecondary">@color/textSecondaryColor_dark</item>
</style>

Мои стили.xml:

<!-- Dark Application theme -->
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="windowActionModeOverlay">false</item>
</style>
<style name="AppTheme.Dark" parent="AppTheme.Base">
    <item name="android:windowBackground">@color/backgroundColor_dark</item>
    <item name="colorAccent">@color/colorAccent_dark</item>
    <item name="android:textColorSecondary">@color/textSecondaryColor_dark</item>
    <item name="android:textColorPrimary">@color/textPrimaryColor_dark</item>
    <item name="android:datePickerStyle">@style/DatePicker_Dark</item>
</style>

<style name="DatePicker_Dark" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@color/colorAccent_dark</item>
    <item name="android:background">@color/primaryColor_dark</item>
    <item name="android:headerBackground">@color/colorAccent_dark</item>
    <item name="android:textColorPrimary">@color/textPrimaryColor_dark</item>
    <item name="android:textColorSecondary">@color/textSecondaryColor_dark</item>
</style>

В моем файле .java я получаю новый экземпляр DatePickerDialog следующим образом:

return new DatePickerDialog(getActivity(), this, year, month, day){
    @Override
    public void onDateChanged(@NonNull DatePicker view, int year, int month, int dayOfMonth) {
          onDateSet(view, year, month, dayOfMonth);
          dismiss();
    }
 };

Снимок: Выбор даты

Ваша помощь будет оценена по достоинству. Спасибо!


person MilanG    schedule 16.12.2017    source источник
comment
поделитесь своим java файлом.   -  person Hemant Parmar    schedule 16.12.2017


Ответы (2)


DatePicker цвет — это выбор родительской темы.

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

и в DatePickerDialog() используйте вышеуказанную тему.

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

Удачного кодирования!!

person Hemant Parmar    schedule 16.12.2017
comment
Спасибо, но я не хочу передавать стиль в конструктор DatePickerDialog. Тем не менее, я отредактировал свой вопрос, чтобы кратко описать все мои стили. - person MilanG; 17.12.2017

Единственный способ, которым я нашел, чтобы изменить цвет панели инструментов панели кнопок, - это передать @StyleRes

AlertDialog.THEME_TRADITIONAL
AlertDialog.THEME_HOLO_DARK
AlertDialog.THEME_HOLO_LIGHT
AlertDialog.THEME_DEVICE_DEFAULT_DARK
AlertDialog.THEME_DEVICE_DEFAULT_LIGHT

при создании экземпляра DatePickerDialog. Кроме того, изменяя атрибуты темы, он может принимать пользовательский цвет, но я этого не проверял. Для меня было достаточно просто изменить его на @color/colorPrimary, как показано ниже. Надеюсь это поможет.

DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(), AlertDialog.THEME_DEVICE_DEFAULT_DARK, dateSetListener, year,month,day);
person exp2Tapavicki    schedule 19.11.2018