【问题标题】:Change the selected day background color更改所选日期的背景颜色
【发布时间】:2017-05-15 09:46:15
【问题描述】:

我一直在尝试对 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 会随着设备/操作系统版本而变化。


所以我的问题是:如何更改用于标记所选日期的颜色? 有没有办法通过代码做到这一点?如果是这样,怎么样?由于用户可以执行一些操作来更改颜色,我想在运行时更改颜色


编辑

样式.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>

...

【问题讨论】:

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


    【解决方案1】:

    使用以下代码更改您选择的日期颜色

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

    【讨论】:

    • 您提供的代码不走运,所选日期仍然是黑色的。
    • 您使用什么颜色作为“android:colorAccent”
    • 我已经从我的Colors.xml 文件中尝试了一些。这是其中之一:&lt;color name="Base"&gt; #FFC85D36 &lt;/color&gt;
    • 你能发布你的 style.xml 吗?
    • @auhmaan 你有没有注意到你的风格有任何变化,我把你的 colorAccent 值更改为所选日期的颜色
    【解决方案2】:

    在应用的基本主题中覆盖 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> -->
    

    【讨论】:

      猜你喜欢
      • 2015-11-01
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      相关资源
      最近更新 更多