如何更改 Android 上的默认 ProgressBar 圆圈颜色

How to change default ProgressBar circle color on Android

我目前在通过 gradle.
导入的 Android 项目中使用外部库 该库显示带有 ProgressBar 圆圈的通知栏。 这是我在其来源中找到的代码:

<ProgressBar
            android:id="@+id/progress_bar"
            android:layout_height="match_parent"
            android:layout_marginBottom="4dp"
            android:layout_marginTop="4dp"
            style="@style/SuperActivityToast_Progress_ProgressBar"/>

关联的样式是这个:

<style name="SuperActivityToast_Progress_ProgressBar" parent="android:Widget.Holo.ProgressBar">
    <item name="android:layout_width">32dp</item>
    <item name="android:layout_marginLeft">8dp</item>
</style>

如果我理解正确,显示的圆圈颜色来自默认颜色(我 phone 上的绿色)。 我需要改变它!

现在,我无法修改源代码,而且库本身也不提供以编程方式设置样式的可能性。

有没有办法在应用级别更改 默认 样式或更好地覆盖此特定样式?

谢谢 大卫

经过多次尝试,我找到了解决方案:

ProgressBar progBar = (ProgressBar) context.getActivity().findViewById(R.id.progress_bar);
if (progBar != null) {
    progBar.setVisibility(View.VISIBLE);
    progBar.setIndeterminate(true);
    progBar.getIndeterminateDrawable().setColorFilter(0xFFFFFFFF, android.graphics.PorterDuff.Mode.MULTIPLY);
}

简单地说,我将获得库创建的进度条对象的引用,并更改它的属性。 (在我的 activity 中,我必须在 "OnStart" 方法中执行此操作,否则它为 null ) 最重要的部分是施展魔法的 "setColorFilter"。

如果您使用 AppCompat 主题,它会使用 accentColor 为圆圈着色。

如果您想将其着色为与主题不同的颜色,则应考虑使用 ThemeOverylay。例如。如果你想使圆圈色调 red 你可以执行以下操作:

在你的 styles.xml

<style name="RedAccent" parent="ThemeOverlay.AppCompat.Light">
    <item name="colorAccent">#F00</item>
</style>

在您的 ProgressBar 中,将主题设置为 RedAccent

<ProgressBar
            android:id="@+id/progress_bar"
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:theme="@style/RedAccent"/>

你的圈子现在变成红色了!

为了将来参考,此更改对我有用:

更改 values/styles 中 AppTheme 内的 colorControlActivated。xml 文件:

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Main theme colors -->
    ....
    <!-- Color for circle in progress bar -->
    <item name="colorControlActivated">#DC0808</item>
</style>

使用这种方法,您无需对 xml 文件中的 <ProgressBar/> 标记执行任何操作。

只需在 ProgressBar 中添加颜色,如下所示:

    <ProgressBar
    android:id="@+id/progressbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:visibility="gone"
    android:indeterminateTint="@color/colorPrimary"  // add color here
    android:layout_centerVertical="true"/>