以编程方式更改自定义进度条的颜色

问题描述 投票:0回答:1

我正在尝试使用Java动态更改自定义进度条的颜色。

这是主布局上ProgressBar的实现:

activity_main.xml

我创建了两个单独的可绘制对象来自定义进度条,如下所示:

custom_progress_bar.xml & custom_progress.xml

这是应该将进度条从绿色(@color/progress)更改为红色的Java代码:

MainActivity.java

这就是主题,(我将两个主题设置为完全相同):

themes.xml & themes.xml (night)

结果: Screenshot

这不是我想要的结果。我希望它变成红色,如 Java 代码所示。我缺少什么?我的副驾驶聊天机器人没有帮助..我非常感谢您的帮助。预先感谢您。

java android xml android-progressbar layer-list
1个回答
0
投票

假设

progress
是一个保存进度条引用的变量,那么您可以使用以下 Java 代码以编程方式更改进度颜色:

LayerDrawable drawable = (LayerDrawable) progress.getProgressDrawable();
Drawable progressLayer = drawable.findDrawableByLayerId(android.R.id.progress);
setTintList(progressLayer.mutate(), context.getResources().getColorStateList(R.color.white, context.getTheme()))

Kotlin 中的等效项:

val drawable = progress.progressDrawable as LayerDrawable
val progressLayer = drawable.findDrawableByLayerId(android.R.id.progress)
setTintList(progressLayer.mutate(), resources.getColorStateList(R.color.white, theme))

setTintLint
是来自
DrawableCompat
的静态函数。颜色应该是有效的 ColorRes 资源。 希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.