以编程方式更改搜索栏颜色

问题描述

我的应用中有一个 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。一种建议的解决方案是抑制它,我就是这样做的。