4

I am trying to set the Dark Theme Style for the DatePickerDialog in Android. As per Vikram's answer here, I don't want to set style in DatePickerDilog's Constructor.

I set the following styles & it's set but doesn't apply to OK & Cancel button's panel in Portrait mode. However, it works in Landscape!!:

My 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>

My styles.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>

In my .java file, I am getting the new instance of the DatePickerDialog as follows:

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

Snapshot: DatePicker

Your Help will be appreciated. Thanks!

MilanG
  • 2,551
  • 16
  • 24

2 Answers2

1

DatePicker color is the choice of parent theme.

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

and in DatePickerDialog() use above theme.

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

Happy coding!!

Hemant Parmar
  • 3,924
  • 7
  • 25
  • 49
  • Thanks but I don't want to pass style in the DatePickerDialog's Constructor. However, I edited my question to brief all my styles. – MilanG Dec 17 '17 at 12:52
0

Only way I found to change color of Button Bar toolbar is to pass @StyleRes

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

when instantiating DatePickerDialog. Furthermore changing theme attributes it might accept custom color but I didn't check that out. For me it was enough just to change it to @color/colorPrimary like bellow example. Hope this helps.

DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(), AlertDialog.THEME_DEVICE_DEFAULT_DARK, dateSetListener, year,month,day);
exp2Tapavicki
  • 311
  • 3
  • 15