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

33

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

这是我尝试过的代码:

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

<TimePicker
                    android:id="@+id/TimePicker"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="5dip"
                    android:layout_marginRight="5dip" />

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

style="@style/date_picker"
android:background="#6495ED"
6个回答

42

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

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

对我来说完美地运作。


这是一个完美的答案! - krisDrOid
TimePickerDialog.OnTimeSetListener - noobEinstien
3
无法工作。没有错误,但是尽管在自定义样式中设置了不同的值,颜色仍然保持不变。需要帮助吗? - izSaad
这对我也起作用了。 - Carlos Espinoza
@DivisionSi <item name="android:textColorPrimary">@color/color</item> 对我很有帮助。 - Mitulát báti

6
你需要创建一个自定义主题并将其保存在某些目录中,最终将此主题设置为应用程序的默认主题。
首先,在values文件夹中添加themes.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">

3
如果需要更改的属性是公共的,那么这将是正确的方法。但遗憾的是,并非所有用于样式小部件的属性都是公共的。老实说,甚至不清楚OP在谈论哪个属性。 - Vikram

3
我认为在XML中没有简单地改变旧的本地选择器小部件灰色颜色的方法。
我建议您使用库HoloEverywhere,以便DatePicker和TimePicker在所有Android 2.1+平台上看起来真的很好。

3
您可以通过这样改变主题来更改日期选择器的主题。
根据您的需要更改条目。
<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以下版本。 - Julia Hexen
1
@JuliaHexen,@KKC 请查看这个库(https://github.com/luminousman/DatePicker),它可以解决在Android 4.x版本下更改背景为银色的问题。 - Ando Masahashi
这是一个包含自编时间选择器和日期选择器的库,而不是使用本地Android类 - 这些类是“普通”的LinearLayouts。如果要使用库,我会选择HoloEverywhere,因为它比旧的Android小部件美观多了 ^^ - Julia Hexen

3

对于日期选择器,请将以下代码添加到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时间选择对话框 = new TimePickerDialog(mContext, R.style.TimePickerTheme, fromListener, hour, min, false);


0
通常情况下,当应用程序主题覆盖了一些时间选择器所依赖的属性时,就会出现这种行为 - 从而产生以下不良视觉效果(具体细节可能取决于您的应用程序主题):

timePicker buggy

虽然最被投票的答案是一个相当好的解决方案,但我正在使用DataBinding进行尝试,所以我找到了另一种方法,不需要在初始化TimePicker时以编程方式设置主题(因为我无法 - 至少在我搜索的时间内 - 找到TimePicker已经初始化后的主题设置器)。这个方法遵循tutorialsbuzz.com上的帖子。 方法1 设置你的样式 - 属性参考同一篇来自tutorialsbuzz.com的文章。
<style name="TimePickerTheme" parent="android:Widget.Material.TimePicker">
    <item name="android:headerBackground">@color/yellow_700</item>
    <item name="android:numbersSelectorColor">@color/yellow_700</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
</style>

然后,根据你使用的是 android.widget.TimePicker 还是 android.app.TimePickerDialog,你可以将项目 android:timePickerStyleandroid:timePickerDialogTheme 设置为刚刚创建的样式表。
<style name="Theme.YourAppTheme" parent="Theme.YourAppParentTheme">
    <!--... something here ...-->
    <item name="android:timePickerStyle">@style/TimePickerTheme</item>
    <!--... something here ...-->
</style>

方法二

再次参考来自tutorialsbuzz.com的同一篇文章中的属性,您可以尝试直接设置属性,而不是通过样式表进行设置 - 出于未知原因,这对大多数情况(对我来说)都不起作用 - 可能是由于属性的覆盖优先级。

<TimePicker
        android:id="@+id/picker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:headerBackground="@color/yellow_700"  <--
        android:numbersSelectorColor="@color/yellow_700" <--
        />

这是我的结果:

updated

希望这能对你有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接