如何从默认的白色更改 DatePicker 对话框的背景颜色?

Posted

技术标签:

【中文标题】如何从默认的白色更改 DatePicker 对话框的背景颜色?【英文标题】:How to Change the DatePickerDialog's Background Color from default White? 【发布时间】:2018-05-30 14:45:33 【问题描述】:

我正在尝试在 android 中为 DatePickerDialog 设置深色主题样式。根据Vikram's answer here,我不想在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();
    
 ;

快照:

您的帮助将不胜感激。谢谢!

【问题讨论】:

分享你的java文件。 【参考方案1】:

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

编码愉快!!

【讨论】:

谢谢,但我不想在 DatePickerDialog 的构造函数中传递样式。但是,我编辑了我的问题以简要介绍我的所有风格。【参考方案2】:

我发现改变按钮栏工具栏颜色的唯一方法是通过@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);

【讨论】:

以上是关于如何从默认的白色更改 DatePicker 对话框的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

更改 DatePicker 背景颜色

如何从角材料datepicker更改日期?

如何更改默认的白色背景 WebView Flex

默认 DatePicker 对话框布局配置问题

Nativescript Datepicker 更改文本颜色

jQuery datepicker 更改事件触发和输入的默认更改事件