Настройка цвета заголовка в новом материале DatePicker
поэтому я пытаюсь изменить цвет заголовка моего DatePicker. Хотя, кажется, это не так просто, как сначала. Вы можете сделать это в XML следующим образом:
android:headerBackground="@color/myColor" />
однако, похоже, нет способа сделать это в коде. Обычные сеттеры не кажутся очевидными (i.e datePicker.setHeaderBackground).
какие идеи?
4 ответов
вот метод для изменения фона заголовка 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 reflection для Lollipop и выше, чтобы получить вид заголовка.
использование:
    DatePickerDialog dpd = new DatePickerDialog(this, this, 2016, 0, 11);
    setDatePickerHeaderBackgroundColor(dpd, getResources().getColor(android.R.color.black));
    dpd.show();
в результате имеем:
EDIT:
в случае, если вы просто хотите установить фон заголовка из 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));
     }
создать пользовательский диалог datepicker. Смотрите это ссылке раз.
вы можете использовать setAccentColor () для изменения цвета заголовка в этом примере. используйте его как dpd.setAccentColor(Color.BLUE);.
Если вы не хотите, чтобы этот цвет кнопки, просто удалите ниже строки из класса '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) переопределить DatePickerStyle стиль CustomDatePickerStyle
<style name="CustomDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
    <item name="android:headerBackground">@color/header_bg_color</item>
</style>
надеюсь, что это помогает.
Edit: извините за пропущенную часть кода, Используйте этот стиль для создания DatePickerDialog следующим образом:
new DatePickerDialog(getActivity(),R.style.CustomDatePickerStyle, this, year, month, day); 
создать такой стиль :
<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
и это сработало для меня.
 
            