在新的Material DatePicker中设置标题颜色

所以我试图改变我的DatePicker头的颜色。 尽pipe如此,它似乎并不像第一个那么容易。 你可以在XML中这样做:

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

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

有任何想法吗?

  • Android MVP - 活动应该是视图还是演示者?
  • 比较Java swing MVC和Androiddevise模式
  • 材料devisebutton带有边框
  • 找不到与给定名称匹配的资源:attr'android:actionModeShareDrawable'appcompat-v7:21.0.0 with compileSdkVersion 21
  • 无法parsing符号abc_ic_search_api_mtrl_alpha
  • 有什么办法可以在API <21(5.0 Lolipop)中做一个材质风格的阴影吗?
  • 在解码位图时捕捉OutOfMemoryError
  • 纹波的颜色应该是什么,colorPrimary或​​colorAccent? (材料devise)
  • 这里是更改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(); } } } 

    正如你可以看到我使用reflection棒棒糖和以上来获取标题视图。

    用法:

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

    结果我们有:

    api> =棒棒糖

    编辑:

    如果你只是想设置DatePicker标题背景,你已经在xml中创build,忘记了Javareflection,只需使用这些行来得到它的工作:

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

    创build自定义dateselect器对话框。 看到这个链接一次。

    您可以在此示例中使用setAccentColor()更改标题的颜色。 像dpd.setAccentColor(Color.BLUE); 。 如果你不想要这个button的颜色,只需从“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)用样式CustomDatePickerStyle重写DatePickerStyle

     <style name="CustomDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker"> <item name="android:headerBackground">@color/header_bg_color</item> </style> 

    希望能帮助到你。

    编辑:遗憾的代码部分,使用这种风格来创buildDatePickerDialog像这样:

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

    创build这种风格:

     <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

    这对我有用。