【问题标题】:Setting header colour in the new Material DatePicker在新的 Material DatePicker 中设置标题颜色
【发布时间】:2016-03-28 12:18:25
【问题描述】:

所以我想改变我的 DatePicker 标题的颜色。不过,这似乎并不像第一次那么容易。您可以像这样在 XML 中执行此操作:

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

但是似乎没有办法在代码中做到这一点。通常的二传手似乎并不明显(即datePicker.setHeaderBackground)。

有什么想法吗?

【问题讨论】:

标签: java android material-design


【解决方案1】:

创建自定义日期选择器对话框。看到这个link 一次。

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

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

【讨论】:

    【解决方案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();
    

    因此我们有:

    编辑:

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

    【讨论】:

    • 完美!谢谢你:)
    • 很高兴为您提供帮助。期待你的赏金:)
    【解决方案3】:

    创建这种风格:

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

    这里解释得很清楚:Change Datepicker dialog color for Android 5.0

    这确实对我有用。

    【讨论】:

      【解决方案4】:

      您需要覆盖您的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) 用 CustomDatePickerStyle 样式覆盖 DatePickerStyle

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

      【讨论】:

        猜你喜欢
        • 2021-04-08
        • 2019-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-17
        • 1970-01-01
        • 2019-08-12
        • 1970-01-01
        相关资源
        最近更新 更多