在新材质DatePicker中设置标题颜色

spo*_*b92 9 java android material-design

所以我试图改变我的DatePicker标题的颜色.尽管如此,它似乎并不那么容易.你可以在XML中这样做:

android:headerBackground="@color/myColor" />
Run Code Online (Sandbox Code Playgroud)

但是,似乎没有办法在代码中执行此操作.通常的制定者似乎并不明显(即datePicker.setHeaderBackground).

有任何想法吗?

rom*_*4ek 3

以下是更改标题背景的方法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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我使用 Lollipop 及以上版本的 java 反射来获取标题视图。

用法:

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

结果我们有:

api >= 棒棒糖

编辑:

如果您只想设置DatePicker在 xml 中创建的标题背景,忘记了 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));
     }
Run Code Online (Sandbox Code Playgroud)