我一直试图将DatePicker
- 不 DatePickerDialog
设为风格,如果重要的话 - 没有任何成功。
我面临的问题是:
如您所见,所选日期背景为黑色。我试图应用以下样式:
<style name="DatePickerStyle" parent="Theme.AppCompat.Light.Dialog">
<item name="colorPrimary"> @color/Red </item>
<item name="colorPrimaryDark"> @color/Blue </item>
<item name="colorAccent"> @color/Green </item>
</style>
但我只会遇到错误:
No resource found that matches the given name: attr 'colorPrimary'
和
Error retrieving parent for item:
No resource found that matches the given name 'Theme.AppCompat.Light.Dialog'.
我试图通过代码来实现,但到目前为止,我设法风格化的唯一方法是标题背景,通过这样做:
( ( datePicker.GetChildAt( 0 ) as LinearLayout ).GetChildAt( 0 ) as LinearLayout )
.SetBackgroundResource( Utils.AppColorResourceId );
或直接id
datePicker.FindViewById( 16909081 ).SetBackgroundResource( Utils.AppColorResourceId );
虽然我主要是因为我害怕id会随着设备/操作系统版本而改变。
所以我的问题是:如何更改用于标记所选日期的颜色? 有没有办法通过代码来做到这一点?如果是这样,它是怎么回事?(我想在运行时更改颜色,因为用户可以采取一些措施来改变颜色)
...
<style name="MyDatePickerDialogTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="colorAccent">@color/Blue</item>
<item name="android:datePickerStyle">@style/DatePickerStyle</item>
<item name="android:colorAccent">@color/Red</item>
</style>
<style name="DatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
<item name="android:headerBackground">@color/Red</item>
<item name="android:calendarTextColor">@color/Blue</item>
<item name="android:dayOfWeekBackground">@color/Green</item>
<item name="android:yearListSelectorColor">@color/Base</item>
</style>
...
答案 0 :(得分:0)
使用以下代码更改所选日期颜色
<style name="MyDatePickerDialogTheme" parent="Theme.AppCompat.Light.Dialog">
<!-- this is new -->
<item name="colorAccent">@color/accent</item>
<item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
<item name="android:colorAccent">@color/primDark</item>
</style>
<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
<item name="android:headerBackground">@color/prim</item>
<item name="android:calendarTextColor">@color/primDark</item>
<item name="android:dayOfWeekBackground">@color/primDark</item>
<item name="android:yearListSelectorColor">@color/accent</item>
<item name="android:datePickerMode">calendar</item>
<item name="android:minDate">01/01/2000</item>
</style>
答案 1 :(得分:0)
在应用的基本主题中覆盖datePickerDialogTheme:
<style name="AppBaseTheme" parent="android:Theme.Material.Light">
....
<item
name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>
这是你的MyDatePickerDialogTheme
<style name="MyDatePickerDialogTheme"
parent="android:Theme.Material.Light.Dialog">
<item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>
我们使用样式MyDatePickerStyle重写了datePickerStyle。父母的选择将再次取决于您的应用程序的基本主题:Widget.Material.DatePicker或Widget.Material.Light.DatePicker。根据您的要求定义:
<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
<item name="android:headerBackground">@color/chosen_header_bg_color</item>
使用此功能,您还可以在下面列出一些自定义
dayOfWeekBackground
dayOfWeekTextAppearance
headerMonthTextAppearance
headerDayOfMonthTextAppearance
headerYearTextAppearance
headerSelectedTextColor
yearListItemTextAppearance
yearListSelectorColor
如果您不想要这么多控件(自定义),则不需要覆盖datePickerStyle。 colorAccent控制大多数DatePicker的颜色。因此,覆盖MyDatePickerDialogTheme中的colorAccent应该可以工作:
<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
<item name="android:colorAccent">@color/date_picker_accent</item>
<!-- No need to override 'datePickerStyle' -->
<!-- <item name="android:datePickerStyle">@style/MyDatePickerStyle</item> -->