Android Material日期范围选择器:如何修改选中区间所有日期的文字颜色?
Material Range Date Picker 区间日期文字颜色修改方案
问题描述
我尝试给Material Range Date Picker设置如下样式:
- 选中区间内的所有日期文字为白色
- 未选中日期文字为黑色
目前仅能实现选中的起始和结束边界日期文字为白色,区间内的其他日期文字仍为黑色,未选中日期为黑色。当前使用的样式代码如下:
<style name="MyMaterialCalendarTheme" parent="ThemeOverlay.MaterialComponents.MaterialCalendar"> <item name="colorOnSurface">@color/black</item> <item name="materialCalendarStyle">@style/MyMaterialCalendarStyle</item> </style> <style name="MyMaterialCalendarStyle" parent="Widget.MaterialComponents.MaterialCalendar"> <item name="rangeFillColor">@color/dark_green</item> <item name="daySelectedStyle">@style/MyDaySelectedStyle</item> </style> <style name="MyDaySelectedStyle" parent="Widget.MaterialComponents.MaterialCalendar.Day.Selected"> <item name="itemTextColor">@color/white</item> </style>
可以看到colorOnSurface控制所有未选中日期的文字颜色,daySelectedStyle仅控制起始和结束边界日期的文字颜色,需要找到方法让区间内所有日期文字变为白色。
解决方案
要实现需求,需要新增dayInRangeStyle属性来控制选中区间内非边界日期的样式,具体修改后的完整代码如下:
<style name="MyMaterialCalendarTheme" parent="ThemeOverlay.MaterialComponents.MaterialCalendar"> <item name="colorOnSurface">@color/black</item> <item name="materialCalendarStyle">@style/MyMaterialCalendarStyle</item> </style> <style name="MyMaterialCalendarStyle" parent="Widget.MaterialComponents.MaterialCalendar"> <item name="rangeFillColor">@color/dark_green</item> <item name="daySelectedStyle">@style/MyDaySelectedStyle</item> <!-- 新增区间内中间日期样式控制 --> <item name="dayInRangeStyle">@style/MyDayInRangeStyle</item> </style> <style name="MyDaySelectedStyle" parent="Widget.MaterialComponents.MaterialCalendar.Day.Selected"> <item name="itemTextColor">@color/white</item> </style> <!-- 定义区间内中间日期的文字颜色 --> <style name="MyDayInRangeStyle" parent="Widget.MaterialComponents.MaterialCalendar.Day.InRange"> <item name="itemTextColor">@color/white</item> </style>
关键说明
dayInRangeStyle:专门针对选中区间内介于起始、结束日期之间的日期生效,设置itemTextColor为白色后,这些中间日期的文字就会变成白色。colorOnSurface:保持黑色,确保未选中的日期文字颜色正常显示。daySelectedStyle:继续控制起始和结束边界日期的文字颜色,维持原有设置即可。
内容的提问来源于stack exchange,提问作者Mirian Fonkam
相关产品推荐
相关产品推荐

