Java 在新材质日期选择器中设置标题颜色

Java 在新材质日期选择器中设置标题颜色,java,android,material-design,Java,Android,Material Design,因此,我试图改变我的日期选择器标题的颜色。这看起来不像第一次那么容易。您可以在XML中这样做: android:headerBackground="@color/myColor" /> 然而,似乎没有一种方法能够在代码中实现这一点。通常的设置器似乎并不明显(即日期选择器.setHeaderBackground) 有什么想法吗?创建自定义日期选择器对话框。看看这个 您可以使用setAccentColor()更改此示例中标题的颜色。像dpd.setAccentColor(Color.BLUE

因此,我试图改变我的日期选择器标题的颜色。这看起来不像第一次那么容易。您可以在XML中这样做:

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