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

时间:2015-12-22 09:24:32

标签: java android material-design

所以我想尝试更改DatePicker标题的颜色。尽管如此,它似乎并不容易。你可以在XML中这样做:

android:headerBackground="@color/myColor" />

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

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

创建自定义datepicker对话框。请参阅此link一次。

您可以使用setAccentColor()来更改此示例中标题的颜色。像dpd.setAccentColor(Color.BLUE);一样使用它。 如果您不想将此颜色设置为按钮,只需从“DatePickerDialog”类中删除以下行。

okButton.setTextColor(mAccentColor);
cancelButton.setTextColor(mAccentColor);

答案 1 :(得分:2)

以下是更改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();
        }
    }
}

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

用法:

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

结果我们有:

api >= lollipop

修改

如果您只是想设置{x}中已创建的标题背景,忘记了java反射,只需使用这些行来实现它:

DatePicker

答案 2 :(得分:1)

您需要覆盖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>

希望它有所帮助。

编辑:很抱歉错过了代码部分, 使用此样式创建DatePickerDialog,如下所示:

new DatePickerDialog(getActivity(),R.style.CustomDatePickerStyle, this, year, month, day); 

答案 3 :(得分:1)

创建此样式:

<?php

$startDate = strtotime('2016-01-11');
$endDate = strtotime('2018-01-11');
$currentDate = $startDate;

$count = 0;
while ($currentDate <= $endDate) {
    echo date('r', $currentDate) . "\n";
    $currentDate = strtotime('+1 week', $currentDate);
    if ($currentDate<=$endDate) {
        $count++;
    }
}

echo $count . "\n";

并将此样式添加到对话框主题:

<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>

这里解释得非常好:Change Datepicker dialog color for Android 5.0

这对我有用。