问题描述
我的应用中有一个 SeekBar
,我想在我的 MainActivity
中以编程方式更改拇指和进度条的颜色
我知道如何在 XML 中进行操作:
android:thumbTint="@color/myColorTest"
android:progressDrawable="@color/myColorTest2"
但我想在 SeekBar 上实现这个 - onProgressChanged - 以便能够实时更改颜色。 我找到了一些有关如何执行此操作的示例 - like this one - 但它们都使用 Java(我认为它们已被弃用)。
我正在努力在 Kotlin 中找出正确的语法。
谢谢!
按照 David Kroukamp 的建议,我遇到了这个问题:
seekbar.getProgressDrawable().colorFilter(Color.RED,PorterDuff.Mode.SRC_IN)
seekbarr.getThumb().colorFilter(Color.RED,PorterDuff.Mode.SRC_IN)
colorFilter 在红色警告“未解析参考”中的位置 colorFilter unresolver reference
解决方法
为我工作:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
mySeekBar.thumb.setTint(ContextCompat.getColor(this@MainActivity,R.color.myTestColor))
mySeekBar.progressDrawable.setTint(ContextCompat.getColor(this@MainActivity,R.color.myTestColor))
}
setTint 是我所需要的,对于所有的工作,我必须把它放在检查构建版本的 if 语句中。
即便如此,我也不是 100% 相信这个解决方案..不确定我是否正确检查了构建版本,而且我没有其他解决方案。 所以这意味着在旧版本中我什么都不做。
编辑: 按照 David 的建议,我删除了 if 语句并测试了代码。它已编译并且似乎可以正常工作。 最后一件事,我在 Android Studio 的“红色警告”中获得了 setTin。一种建议的解决方案是抑制它,我就是这样做的。