如何在Adapter中通过代码动态修改SeekBar的setProgressDrawable及样式
实现按钮切换SeekBar样式与文本颜色的优化方案
需求场景
在Adapter中,通过点击3个不同按钮,分别修改对应项的文本颜色、SeekBar滑块样式和进度条背景。
原代码优化思路
原代码通过if-else分支判断pos来设置样式,存在重复代码多、扩展性差的问题(新增按钮样式需修改分支逻辑)。我们可以通过配置化管理来简化代码:
优化后代码实现
- 先定义一个数据类,封装所有样式参数:
// 封装SeekBar与文本的样式配置 data class SeekBarStyleConfig( val textColorRes: Int, val thumbColorRes: Int, val progressDrawableRes: Int )
- 在Adapter中初始化样式配置列表,把对应按钮的样式集中管理:
// 按按钮顺序定义对应的样式配置 private val styleConfigs = listOf( SeekBarStyleConfig(R.color._495A87, R.color._495A87, R.drawable.quiz_seekbar_joyscore_progress), SeekBarStyleConfig(R.color._83CBC2, R.color._83CBC2, R.drawable.quiz_seekbar_biomescore_progress), SeekBarStyleConfig(R.color._EF8470, R.color._EF8470, R.drawable.quiz_seekbar_joyurth_progress) )
- 替换原有的
if-else逻辑,直接根据pos获取配置并设置样式:
// 处理pos越界情况,默认取最后一项配置 val config = styleConfigs.getOrElse(pos) { styleConfigs.last() } // 设置文本颜色(使用ContextCompat适配高版本API) viewholder.binding.quizNameTv.setTextColor(ContextCompat.getColor(context, config.textColorRes)) // 设置SeekBar滑块 viewholder.binding.quizSeekbar.setThumb(ViewUtil.setSeekbarThumb(context, config.thumbColorRes)) // 设置SeekBar进度条背景 viewholder.binding.quizSeekbar.setProgressDrawable(ContextCompat.getDrawable(context, config.progressDrawableRes))
额外说明
- 使用
ContextCompat替代getResources().getColor()/getResources().getDrawable(),适配Android 6.0及以上版本的资源获取规范,避免API过时警告。 - 配置化管理后,新增按钮样式只需在
styleConfigs列表中添加一项配置,无需修改逻辑代码,扩展性更强。 - 按钮点击时,只需将对应按钮的索引(
pos)传递给Adapter的更新方法(比如notifyItemChanged),即可触发样式切换。
内容的提问来源于stack exchange,提问作者Hector4888
相关产品推荐
相关产品推荐

