修改Switch开关状态的Track颜色,保留原有Thumb与Track尺寸
实现Switch开关状态的Track颜色切换(不修改现有Drawable尺寸)
方法一:使用Drawable状态选择器(兼容所有Android版本)
创建新的Drawable文件 res/drawable/track_selector.xml,完全复用原custom_track.xml的尺寸、圆角设置,仅针对开关状态定义不同颜色:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 开关开启状态 --> <item android:state_checked="true"> <shape android:shape="rectangle"> <size android:width="60dp" android:height="30dp" /> <corners android:radius="15dp" /> <solid android:color="@color/orange" /> <!-- 替换为你需要的橙色资源 --> </shape> </item> <!-- 开关关闭状态(默认) --> <item> <shape android:shape="rectangle"> <size android:width="60dp" android:height="30dp" /> <corners android:radius="15dp" /> <solid android:color="@color/cold_grey06" /> <!-- 原灰色资源 --> </shape> </item> </selector>
修改Switch布局,将android:track指向这个新选择器,android:thumb保留原文件不变:
<Switch android:id="@+id/rememberSwitch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:thumb="@drawable/custom_thumb" android:track="@drawable/track_selector" />
方法二:使用Tint着色(API 21+ 或 AppCompatSwitch兼容低版本)
若项目支持API 21及以上,或使用AppCompatSwitch,可通过Tint更简洁实现,无需重复编写shape结构:
- 创建颜色状态选择器
res/color/track_color.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/orange" android:state_checked="true" /> <item android:color="@color/cold_grey06" /> </selector>
- 修改Switch布局,保留原
custom_track.xml,添加Tint属性:
<Switch android:id="@+id/rememberSwitch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:thumb="@drawable/custom_thumb" android:track="@drawable/custom_track" android:trackTint="@color/track_color" android:trackTintMode="src_in" />
如需兼容API 21以下,替换为AppCompatSwitch并使用AppCompat属性:
<androidx.appcompat.widget.SwitchCompat android:id="@+id/rememberSwitch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" app:thumb="@drawable/custom_thumb" app:track="@drawable/custom_track" app:trackTint="@color/track_color" app:trackTintMode="src_in" />
内容的提问来源于stack exchange,提问作者Ömer Seyfettin Yavuzyiğit
相关产品推荐
相关产品推荐

