You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Adapter中通过代码动态修改SeekBar的setProgressDrawable及样式

实现按钮切换SeekBar样式与文本颜色的优化方案

需求场景

在Adapter中,通过点击3个不同按钮,分别修改对应项的文本颜色、SeekBar滑块样式和进度条背景。

原代码优化思路

原代码通过if-else分支判断pos来设置样式,存在重复代码多、扩展性差的问题(新增按钮样式需修改分支逻辑)。我们可以通过配置化管理来简化代码:

优化后代码实现

  1. 先定义一个数据类,封装所有样式参数:
// 封装SeekBar与文本的样式配置
data class SeekBarStyleConfig(
    val textColorRes: Int,
    val thumbColorRes: Int,
    val progressDrawableRes: Int
)
  1. 在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)
)
  1. 替换原有的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:32:01