Настройка цвета заголовка в новом материале 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();

в результате имеем:

api >= lollipop

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

и это сработало для меня.