如何更改 Android 中 DatePicker 和 TimePicker 对话框的默认颜色?

Posted

技术标签:

【中文标题】如何更改 Android 中 DatePicker 和 TimePicker 对话框的默认颜色?【英文标题】:How to change the default color of DatePicker and TimePicker dialog in Android? 【发布时间】:2012-06-20 02:36:51 【问题描述】:

有没有办法改变DatePickerTimePicker对话框的默认颜色?

这是我试过的代码

<DatePicker
                    style="@style/date_picker"
                    android:background="#6495ED"
                    android:id="@+id/DatePicker"
                    android:layout_
                    android:layout_
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="5dip"
                    android:layout_marginRight="5dip" />

<TimePicker
                    android:id="@+id/TimePicker"
                    android:layout_
                    android:layout_
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="5dip"
                    android:layout_marginRight="5dip" />

下面两行只更改背景颜色,我想更改日期和时间选择器的默认银色。 请帮忙。

style="@style/date_picker"
android:background="#6495ED"

【问题讨论】:

【参考方案1】:

更改选择器对话框的最佳方法是为其添加自定义样式。

<style name="TimePickerTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@color/color_primary</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
</style>

TimePickerDialog timePicker = new TimePickerDialog(mContext, R.style.TimePickerTheme, fromListener, hour, min, false);

非常适合我。

【讨论】:

这是一个完美的答案! TimePickerDialog.OnTimeSetListener 不工作。没有错误,但颜色保持不变,即使在自定义样式中为它们设置了明显不同的值。有什么帮助吗? 这对我也有用。 @DivisionSi @color/color 成功了。【参考方案2】:

您必须创建一个自定义主题并将其保存在某些目录中才能最终将此主题设置为应用程序的默认主题

首先,在值中添加一个像这样的主题.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyAppTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <!-- Any customizations for your app running on pre-3.0 devices here -->
    </style>
</resources> 

然后,在 res 目录下创建一个名为“values-v11”(Android 3.0+)的目录,并放入一个像这样的themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyAppTheme" parent="@android:style/Theme.Holo.Light">
        <!-- Any customizations for your app running on 3.0+ devices here -->
    </style>
</resources>

最后在res目录下创建一个名为“values-v14”(Android 4.0+)的目录,并创建一个themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyAppTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
        <!-- Any customizations for your app running on 4.0+ devices here -->
    </style>
</resources>

终于在你的 manifest.xml 中

<application
        ...
        android:theme="@style/MyAppTheme">

【讨论】:

如果需要更改的属性是公开的,这将是可行的方法。遗憾的是,并非所有用于设置小部件样式的属性都是公开的。老实说,它甚至不清楚OP在谈论什么属性。【参考方案3】:

我认为没有办法在 XML 中轻松更改旧的原生选择器小部件的灰色。

我建议您使用库 HoloEverywhere,这样 DatePicker 和 TimePicker 在所有 Android 平台 2.1+ 上看起来都非常好。

【讨论】:

【参考方案4】:

您可以通过像这样更改主题来更改日期选择器的主题。

根据你改变项目。

<style name="date_picker" parent="@android:style/Widget.DeviceDefault.DatePicker">
<item name="android:divider">@drawable/dialog_divider</item>

根据您更改项目。 并将此主题设置为您的数据选择器样式

style="@style/date_picker"

【讨论】:

这仅对新的 DatePicker 和 TimePicker 有用,不适用于具有“银色”的 Android 低 4.x。 @JuliaHexen,@KKC Check this lib 这是针对低版本 Android 4.x 的解决方案,您可以更改背景银色 这是一个带有自编码 TimePicker 和 DatePicker 的库,而不是原生的 Android 类——它们是“正常的”LinearLayouts。如果我使用库,我会选择 HoloEverywhere,因为它比旧的 Android 垃圾小部件更漂亮^^【参考方案5】:

对于日期选择器,将此代码添加到 color.xml

  <color name="mdtp_accent_color">#070B82</color>
  <color name="mdtp_accent_color_dark">#0D105E</color>

你可以在 style.xml 中定义样式

 <style name="TimePickerTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/blue</item>
</style>

并在 xml 中设置样式:

 android:theme="@style/MyAppTheme"

或以编程方式:

TimePickerDialog timePicker = new TimePickerDialog(mContext, R.style.TimePickerTheme, fromListener, hour, min, false);

【讨论】:

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

如何通过 Intent 初始化 Android DatePicker?

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

Nativescript Datepicker 更改文本颜色

如何更改日期选择器中的文本大小?

Android DatePicker仅更改为月份和年份

更改 DatePicker [Xamarin.Forms] 的颜色