Java 在新材质日期选择器中设置标题颜色
因此,我试图改变我的日期选择器标题的颜色。这看起来不像第一次那么容易。您可以在XML中这样做:Java 在新材质日期选择器中设置标题颜色,java,android,material-design,Java,Android,Material Design,因此,我试图改变我的日期选择器标题的颜色。这看起来不像第一次那么容易。您可以在XML中这样做: android:headerBackground="@color/myColor" /> 然而,似乎没有一种方法能够在代码中实现这一点。通常的设置器似乎并不明显(即日期选择器.setHeaderBackground) 有什么想法吗?创建自定义日期选择器对话框。看看这个 您可以使用setAccentColor()更改此示例中标题的颜色。像dpd.setAccentColor(Color.BLUE
android:headerBackground="@color/myColor" />
然而,似乎没有一种方法能够在代码中实现这一点。通常的设置器似乎并不明显(即日期选择器.setHeaderBackground
)
有什么想法吗?创建自定义日期选择器对话框。看看这个 您可以使用setAccentColor()更改此示例中标题的颜色。像
dpd.setAccentColor(Color.BLUE)一样使用它代码>。
如果您不希望此颜色显示在按钮上,只需从“DatePickerDialog”类中删除下面的行
okButton.setTextColor(mAccentColor);
cancelButton.setTextColor(mAccentColor);
您需要覆盖日期选择器样式
,按照以下步骤操作
1) 在应用程序的基本主题中覆盖DatePickerDialogTheme
:
<style name="AppBaseTheme" parent="android:Theme.Material.Light">
....
<item name="android:datePickerDialogTheme">@style/CustomDatePickerDialogTheme</item>
</style>
3) 使用样式CustomDatePickerStyle
<style name="CustomDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
<item name="android:headerBackground">@color/header_bg_color</item>
</style>
创建此样式:
<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
<item name="android:headerBackground">@color/chosen_header_bg_color</item>
</style
@颜色/选择的\u标题\u背景\u颜色
以下是更改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();
}
}
}
正如您所看到的,我正在使用棒棒糖和更高版本的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));
}
检查Vikram的答案完美!谢谢:)很高兴能帮助你。期待你的赏金:)
<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
<item name="android:headerBackground">@color/chosen_header_bg_color</item>
</style>
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();
}
}
}
DatePickerDialog dpd = new DatePickerDialog(this, this, 2016, 0, 11);
setDatePickerHeaderBackgroundColor(dpd, getResources().getColor(android.R.color.black));
dpd.show();
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));
}