Android MaterialTimePicker自定义样式问题:无法修改选中Chip相关属性
MaterialTimePicker 自定义样式解决方案
问题1 & 2:修改选中Chip的背景与文字颜色
你的TimePicker.Chip样式继承父类没问题,但需要确保颜色选择器正确区分选中/未选中状态(MaterialTimePicker的Chip依赖state_selected状态标识选中)。
1. 创建Chip背景颜色选择器
在res/color/目录下新建time_picker_chip_background_selector.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 选中状态背景色 --> <item android:color="@color/your_selected_bg_color" android:state_selected="true"/> <!-- 未选中状态背景色 --> <item android:color="@color/your_unselected_bg_color" android:state_selected="false"/> </selector>
2. 创建Chip文字颜色选择器
在res/color/目录下新建time_picker_chip_text_selector.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 选中状态文字色 --> <item android:color="@color/your_selected_text_color" android:state_selected="true"/> <!-- 未选中状态文字色 --> <item android:color="@color/your_unselected_text_color" android:state_selected="false"/> </selector>
3. 修正Chip样式
确保样式正确应用上述选择器:
<style name="TimePicker.Chip" parent="Widget.MaterialComponents.TimePicker.Display"> <item name="chipBackgroundColor">@color/time_picker_chip_background_selector</item> <item name="android:textColor">@color/time_picker_chip_text_selector</item> <item name="rippleColor">@color/yellow_56</item> <item name="android:textAlignment">center</item> </style>
问题3:移除或设置Chip标签颜色
MaterialTimePicker的Chip标签(如"AM"/"PM")属于Chip的图标部分,可通过以下两种方式处理:
方式1:隐藏标签
适用于Material Components版本≥1.5.0,通过属性直接隐藏图标:
<style name="TimePicker.Chip" parent="Widget.MaterialComponents.TimePicker.Display"> <!-- 隐藏标签图标 --> <item name="chipIconVisible">false</item> </style>
方式2:修改标签颜色
保留标签并自定义颜色:
<style name="TimePicker.Chip" parent="Widget.MaterialComponents.TimePicker.Display"> <!-- 设置标签图标颜色 --> <item name="chipIconTint">@color/your_label_color</item> </style>
完整修改后的样式代码
<style name="TimePicker" parent="ThemeOverlay.MaterialComponents.TimePicker"> <item name="colorPrimary">@color/primary_71</item> <item name="colorSurface">@color/blue_22</item> <item name="colorOnSurface">@color/grey_100</item> <item name="materialButtonOutlinedStyle">@style/TimePicker.Button</item> <item name="chipStyle">@style/TimePicker.Chip</item> <item name="imageButtonStyle">@style/TimePicker.ImageButton</item> <item name="borderlessButtonStyle">@style/borderlessButtonStyle</item> </style> <style name="borderlessButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog"> <item name="android:textColor">@color/picker_dialog_color_selector</item> </style> <style name="TimePicker.Button" parent="Widget.MaterialComponents.TimePicker.Button"> <item name="backgroundTint">@color/time_picker_button_background_selector</item> <item name="android:layout_height">48dp</item> <item name="android:padding">0dp</item> <item name="android:insetTop">0dp</item> <item name="android:insetBottom">0dp</item> <item name="android:textColor">@color/time_picker_button_text_selector</item> <item name="android:textAlignment">center</item> <item name="strokeColor">@color/blue_37</item> <item name="strokeWidth">1dp</item> </style> <style name="TimePicker.Chip" parent="Widget.MaterialComponents.TimePicker.Display"> <item name="chipBackgroundColor">@color/time_picker_chip_background_selector</item> <item name="rippleColor">@color/yellow_56</item> <item name="android:textAlignment">center</item> <item name="android:textColor">@color/time_picker_chip_text_selector</item> <!-- 选择一种方式处理标签 --> <item name="chipIconVisible">false</item> <!-- <item name="chipIconTint">@color/your_label_color</item> --> </style> <style name="TimePicker.ImageButton" parent="Widget.MaterialComponents.TimePicker.ImageButton"> <item name="android:visibility">gone</item> </style>
内容的提问来源于stack exchange,提问作者Evgeni Roitburg
相关产品推荐
相关产品推荐

