如何在AndroidX偏好设置中自定义SwitchPreferenceCompat的滑柄与滑块颜色?
自定义AndroidX SwitchPreferenceCompat的滑柄与滑块颜色
方案一:全局主题配置(所有SwitchPreferenceCompat生效)
直接在你的Theme.App.Settings主题中扩展SwitchCompat的样式,通过颜色状态列表控制滑柄(thumb)和滑块(track)的选中/未选中颜色:
- 首先创建两个颜色状态列表文件:
res/color/switch_thumb_color.xml(滑柄颜色):
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 开关选中时的滑柄颜色 --> <item android:color="@color/your_selected_thumb_color" android:state_checked="true"/> <!-- 开关未选中时的滑柄颜色 --> <item android:color="@color/your_default_thumb_color"/> </selector>
res/color/switch_track_color.xml(滑块背景颜色):
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 开关选中时的滑块颜色 --> <item android:color="@color/your_selected_track_color" android:state_checked="true"/> <!-- 开关未选中时的滑块颜色 --> <item android:color="@color/your_default_track_color"/> </selector>
- 修改
styles.xml,添加自定义SwitchCompat样式并关联到主题:
<style name="Theme.App.Settings" parent="Theme.AppCompat.NoActionBar"> <item name="android:textColorPrimary">@color/colorAccent</item> <!-- 关联自定义SwitchCompat样式 --> <item name="switchStyle">@style/CustomSwitchStyle</item> </style> <!-- 自定义SwitchCompat样式 --> <style name="CustomSwitchStyle" parent="Widget.AppCompat.CompoundButton.Switch"> <!-- 应用滑柄颜色状态列表 --> <item name="android:thumbTint">@color/switch_thumb_color</item> <!-- 应用滑块颜色状态列表 --> <item name="android:trackTint">@color/switch_track_color</item> </style>
方案二:单独修改指定SwitchPreferenceCompat(仅目标控件生效)
如果只想修改某个特定的开关偏好,无需全局修改,可以直接在preferences.xml中为目标控件指定自定义样式:
- 先按照方案一的步骤创建好颜色状态列表和
CustomSwitchStyle样式。 - 在
preferences.xml中为SwitchPreferenceCompat添加app:switchStyle属性(需先声明app命名空间):
<SwitchPreferenceCompat xmlns:app="http://schemas.android.com/apk/res-auto" android:key="@string/soundOnKey" android:title="@string/soundOnTitle" android:summary="@string/soundOnSummary" <!-- 应用自定义样式 --> app:switchStyle="@style/CustomSwitchStyle"/>
补充说明
SwitchPreferenceCompat内部使用的是AndroidX的SwitchCompat控件,所以所有针对SwitchCompat的样式配置都适用于它。如果需要更复杂的外观(比如自定义滑柄形状),可以替换thumbTint为自定义drawable资源,通过selector控制不同状态下的图标。
内容的提问来源于stack exchange,提问作者Andy Johnson
相关产品推荐
相关产品推荐

