在新的 Material DatePicker 中设置标题颜色
Posted
技术标签:
【中文标题】在新的 Material DatePicker 中设置标题颜色【英文标题】:Setting header colour in the new Material DatePicker 【发布时间】:2016-03-28 12:18:25 【问题描述】:所以我想改变我的 DatePicker 标题的颜色。不过,这似乎并不像第一次那么容易。您可以像这样在 XML 中执行此操作:
android:headerBackground="@color/myColor" />
但是似乎没有办法在代码中做到这一点。通常的二传手似乎并不明显(即datePicker.setHeaderBackground
)。
有什么想法吗?
【问题讨论】:
查看维克拉姆的回答***.com/questions/28738089/… 【参考方案1】:创建自定义日期选择器对话框。看到这个link 一次。
您可以使用 setAccentColor() 更改此示例中标题的颜色。像dpd.setAccentColor(Color.BLUE);
一样使用它。
如果您不希望按钮使用这种颜色,只需从“DatePickerDialog”类中删除以下行。
okButton.setTextColor(mAccentColor);
cancelButton.setTextColor(mAccentColor);
【讨论】:
【参考方案2】:这里是更改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();
如您所见,我正在使用 Lollipop 及更高版本的 java 反射来获取标题视图。
用法:
DatePickerDialog dpd = new DatePickerDialog(this, this, 2016, 0, 11);
setDatePickerHeaderBackgroundColor(dpd, getResources().getColor(android.R.color.black));
dpd.show();
因此我们有:
编辑:
如果您只想设置在 xml 中创建的 DatePicker
的标题背景,忘记了 java 反射,只需使用这些行使其工作:
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));
【讨论】:
完美!谢谢你:) 很高兴为您提供帮助。期待你的赏金:)【参考方案3】:创建这种风格:
<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>
这里解释得很清楚:Change Datepicker dialog color for Android 5.0
这确实对我有用。
【讨论】:
【参考方案4】:您需要覆盖您的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>
希望对你有帮助。
编辑:很抱歉错过了代码部分, 使用此样式创建 DatePickerDialog 如下:
new DatePickerDialog(getActivity(),R.style.CustomDatePickerStyle, this, year, month, day);
【讨论】:
以上是关于在新的 Material DatePicker 中设置标题颜色的主要内容,如果未能解决你的问题,请参考以下文章
带有 AppCompat 的 Android Material Design Datepicker
使用 momentjs 更改 Angular Material 中 md-datepicker 的格式
Android Material Design Inline Datepicker问题
如何从日期数组中禁用 Angular Material Datepicker 日期?