为Android 5.0更改Datepicker对话框颜色

是否有可能更改为Android 5.0的datepicker(也是timepicker)颜色scheme?

我试着设置口音的颜色,但是这不起作用(无论是与无android:

 <!-- colorPrimary is used for the default action bar background --> <item name="colorPrimary">@color/purple</item> <!-- colorPrimaryDark is used for the status bar --> <item name="colorPrimaryDark">@color/purple_tint</item> <!-- colorAccent is used as the default value for colorControlActivated which is used to tint widgets --> <item name="colorAccent">@color/purple_tint</item> 

从原来的: 在这里输入图像说明

像这样的东西: 在这里输入图像说明

Neil的build议导致全屏DatePicker是父主题的select:

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

而且,如果你走这条路线,你必须在创buildDatePickerDialog指定主题:

 // R.style.DialogTheme 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(); 

这在我看来是不好的。 一个人应该尽量保持java和styles.xml / themes.xml内的样式。

我同意Neil的build议,有一点改变(改变父主题说, Theme.Material.Light.Dialog )会得到你想要的结果。 但是,这是另一种方式:

在第一次检查中,我们遇到了datePickerStyle ,它定义了诸如: datePickerStyle (你正在改变什么), dayOfWeekBackground以及其他一些文本颜色和文本样式。

在应用程序主题中覆盖此属性将不起作用。 DatePickerDialog使用可由属性datePickerDialogTheme分配的单独主题。 所以,为了让我们的更改datePickerStyle ,我们必须在重写datePickerStyle覆盖datePickerDialogTheme

开始了:

覆盖应用的基本主题内的datePickerDialogTheme

 <style name="AppBaseTheme" parent="android:Theme.Material.Light"> .... <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item> </style> 

定义MyDatePickerDialogTheme 。 父主题的select将取决于你的应用程序的基本主题是:它可以是Theme.Material.DialogTheme.Material.Light.Dialog

 <style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog"> <item name="android:datePickerStyle">@style/MyDatePickerStyle</item> </style> 

我们用datePickerStyle风格重写了MyDatePickerStyle 。 父母的select将再次取决于你的应用程序的基本主题是: Widget.Material.DatePickerWidget.Material.Light.DatePicker 。 根据您的要求定义它:

 <style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker"> <item name="android:headerBackground">@color/chosen_header_bg_color</item> </style> 

目前,我们只重写headerBackground ,它默认设置为?attr/colorAccent (这也是为什么Neilbuild议在更改背景时起作用)。 但是还有相当多的定制可能:

 dayOfWeekBackground dayOfWeekTextAppearance headerMonthTextAppearance headerDayOfMonthTextAppearance headerYearTextAppearance headerSelectedTextColor yearListItemTextAppearance yearListSelectorColor calendarTextColor calendarSelectedTextColor 

如果你不想要这么多的控​​制(定制),你不需要重写datePickerStylecolorAccent控制DatePicker's大部分颜色。 所以,覆盖colorAccent里面的MyDatePickerDialogTheme应该工作:

 <style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog"> <item name="android:colorAccent">@color/date_picker_accent</item> <!-- No need to override 'datePickerStyle' --> <!-- <item name="android:datePickerStyle">@style/MyDatePickerStyle</item> --> </style> 

覆盖colorAccent为您提供改变OKCANCEL文字颜色的额外好处。 不错。

这样您就不必为DatePickerDialog's构造函数提供任何样式信息。 一切正常连线:

 DatePickerDialog dpd = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { } }, 2015, 5, 22); dpd.show(); 

试试这个。

代码

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

样式在styles.xml文件中

编辑 – 改变主题为Theme.AppCompat.Light.Dialogbuild议

 <style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog"> <item name="colorAccent">@color/blue_500</item> </style> 

只要提一下,你也可以使用android.R.style.Theme_DeviceDefault_Light_Dialog等默认的主题。

 new DatePickerDialog(MainActivity.this, android.R.style.Theme_DeviceDefault_Light_Dialog, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { //DO SOMETHING } }, 2015, 02, 26).show(); 

你没有创build主题只是写在你的对话框创build对象

 DatePickerDialog datePicker = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_LIGHT,this, mYear, mMonth, mDay); 

按照这个,它会给你所有types的dateselect器样式,这是真正的工作

http://www.android-examples.com/change-datepickerdialog-theme-in-android-using-dialogfragment/

试试这个,为我工作

colorAccent两个选项, colorAccentandroid:colorAccent

 <style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> .... <item name="android:dialogTheme">@style/AppTheme.DialogTheme</item> <item name="android:datePickerDialogTheme">@style/Dialog.Theme</item> </style> <style name="AppTheme.DialogTheme" parent="Theme.AppCompat.Light.Dialog"> <!-- Put the two options, colorAccent and android:colorAccent. --> <item name="colorAccent">@color/colorPrimary</item> <item name="android:colorPrimary">@color/colorPrimary</item> <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item> <item name="android:colorAccent">@color/colorPrimary</item> </style> 

我有问题,时间select器button还没有在Android的API 24的屏幕上看到。 (API 21+)它解决了

 <style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog"> <item name="android:colorAccent">@color/colorPrimary2</item></style> <style name="Theme" parent="BBaseTheme"> <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item> </style> 
 <style name="AppThemeDatePicker" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorAccent">@color/select2</item> <item name="android:colorAccent">@color/select2</item> <item name="android:datePickerStyle">@style/MyDatePickerStyle</item> </style> <style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker"> <item name="android:headerBackground">@color/select2</item> </style>