在新的Material DatePicker中设置标题颜色

所以我试图改变我的DatePicker头的颜色。 尽pipe如此,它似乎并不像第一个那么容易。 你可以在XML中这样做:

android:headerBackground="@color/myColor" /> 

但是,似乎没有办法在代码中做到这一点。 通常的setter似乎并不明显(即datePicker.setHeaderBackground )。

有任何想法吗?

Solutions Collecting From Web of "在新的Material DatePicker中设置标题颜色"

这里是更改DatePickerDialog标题背景的方法:

 private void setDatePickerHeaderBackgroundColor(DatePickerDialog dpd, int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { try { Field mDatePickerField; mDatePickerField = DatePickerDialog.class.getDeclaredField("mDatePicker"); mDatePickerField.setAccessible(true); final DatePicker mDatePicker = (DatePicker) mDatePickerField.get(dpd); int headerId = Resources.getSystem().getIdentifier("day_picker_selector_layout", "id", "android"); final View header = mDatePicker.findViewById(headerId); header.setBackgroundColor(color); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } 

正如你可以看到我使用reflection棒棒糖和以上来获取标题视图。

用法:

  DatePickerDialog dpd = new DatePickerDialog(this, this, 2016, 0, 11); setDatePickerHeaderBackgroundColor(dpd, getResources().getColor(android.R.color.black)); dpd.show(); 

结果我们有:

api> =棒棒糖

编辑:

如果你只是想设置DatePicker标题背景,你已经在xml中创build,忘记了Javareflection,只需使用这些行来得到它的工作:

  DatePicker mDatePicker = (DatePicker) findViewById(R.id.date_picker); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { int headerId = Resources.getSystem().getIdentifier("day_picker_selector_layout", "id", "android"); final View header = mDatePicker.findViewById(headerId); header.setBackgroundColor(getResources().getColor(android.R.color.black)); } 

创build自定义dateselect器对话框。 看到这个链接一次。

您可以在此示例中使用setAccentColor()更改标题的颜色。 像dpd.setAccentColor(Color.BLUE); 。 如果你不想要这个button的颜色,只需从“DatePickerDialog”类的下面的行中删除。

 okButton.setTextColor(mAccentColor); cancelButton.setTextColor(mAccentColor); 

你需要覆盖你的DatePickerStyle ,按照步骤,

1)覆盖你的应用的基本主题内的DatePickerDialogTheme

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

2)定义CustomDatePickerDialogTheme

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

3)用样式CustomDatePickerStyle重写DatePickerStyle

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

希望能帮助到你。

编辑:遗憾的代码部分,使用这种风格来创buildDatePickerDialog像这样:

 new DatePickerDialog(getActivity(),R.style.CustomDatePickerStyle, this, year, month, day); 

创build这种风格:

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

并将此样式添加到您的对话框主题中:

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

并将此对话框添加到您的应用程序主题:

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

这是非常需要解释这里: 更改 Datepicker 对话框颜色为Android 5.0

这对我有用。