更改所选日期背景颜色

时间:2017-05-15 09:46:15

标签: android xamarin.android android-styles android-datepicker

我一直试图将DatePicker - DatePickerDialog设为风格,如果重要的话 - 没有任何成功。

我面临的问题是:

enter image description here

如您所见,所选日期背景为黑色。我试图应用以下样式:

<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会随着设备/操作系统版本而改变。

所以我的问题是:如何更改用于标记所选日期的颜色?  有没有办法通过代码来做到这一点?如果是这样,它是怎么回事?我想在运行时更改颜色,因为用户可以采取一些措施来改变颜色

修改

Styles.xml

...

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

...

2 个答案:

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