Настройка цвета заголовка в новом материале 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
и это сработало для меня.