如何获取SwitchMaterial基于主题colorSecondary生成track颜色的代码及逻辑
SwitchMaterial Track颜色生成逻辑及对应代码
核心生成逻辑
SwitchMaterial的track颜色通过**颜色状态列表(ColorStateList)**结合主题属性实现,不同状态的颜色规则如下:
- 选中且启用状态:直接复用主题
colorSecondary(你的值为#FFCC80),将透明度调整为38%(对应十六进制alpha值0x60),最终颜色为#60FFCC80 - 未选中且启用状态:使用主题
colorOnSurface,透明度12% - 禁用状态(无论是否选中):同样使用
colorOnSurface,透明度12%
对应的默认代码实现
在Material Components库的资源文件中,track颜色的状态列表定义在res/color/design_switch_track_color.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="?attr/colorSecondary" android:alpha="0.38" android:state_checked="true"/> <item android:color="?attr/colorOnSurface" android:alpha="0.12" android:state_enabled="true"/> <item android:color="?attr/colorOnSurface" android:alpha="0.12"/> </selector>
如果需要在代码中手动生成选中状态的track颜色,可以借助AndroidX的ColorUtils工具类:
import androidx.core.graphics.ColorUtils import android.content.Context import androidx.core.content.ContextCompat // 从主题或资源获取colorSecondary val colorSecondary = ContextCompat.getColor(context, R.color.your_color_secondary) // 生成选中状态的track颜色(38%透明度) val selectedTrackColor = ColorUtils.setAlphaComponent(colorSecondary, (0.38 * 255).toInt())
内容的提问来源于stack exchange,提问作者ronenfe
相关产品推荐
相关产品推荐

