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

Posted

技术标签:

【中文标题】如何在 Android 上更改默认 ProgressBar 圆圈颜色【英文标题】:How to change default ProgressBar circle color on Android 【发布时间】:2015-11-10 10:57:43 【问题描述】:

我目前在通过 gradle 导入的 android 项目中使用外部库。 这个库显示了一个带有 ProgressBar 圆圈的通知栏。 这是我在它的源代码中找到的代码:

<ProgressBar
            android:id="@+id/progress_bar"
            android:layout_
            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>

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

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

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

谢谢 大卫

【问题讨论】:

Android change Horizonal Progress bar color的可能重复 【参考方案1】:

如果您使用的是 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_
            android:layout_
            android:theme="@style/RedAccent"/>

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

【讨论】:

谢谢!快速简便的解决方案,但仅在通过包含“@style”so android:theme="@style/RedAccent" 引用主题后才有效 - 谢谢 是的@CliveSargeant,很好。它必须是'@style/',因为我们引用了样式。我已经更新了答案。 这是一个非常有用的方法。我没有意识到我们可以用这种方式覆盖应用程序样式! 你是传奇的定义 这个解决方案对我不起作用,我必须按照下面的答案之一设置colorControlActivated【参考方案2】:

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

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);

简单地说,我将获得由库创建的进度条对象的引用,并更改它的属性。 (在我的活动中,我必须在“OnStart”方法中执行此操作,否则为空) 最重要的部分是发挥神奇作用的“setColorFilter”。

【讨论】:

Mode.MULTIPLY 将颜色与进度条颜色相乘,如果有人想要纯纯色,请使用 PorterDuff.Mode.SRC_ATOP【参考方案3】:

对于未来的参考,这个改变对我有用的是:

values/styles.xml 文件中更改 AppTheme 中的 colorControlActivated

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

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

【讨论】:

colorControlActivated 会影响其他东西吗?如果是这样,哪个?深色主题的行为是否有所不同? @VivekPratapSingh 您是否在清单文件中设置了 AppTheme? &lt;application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher" android:supportsRtl="true" android:theme="@style/AppTheme"&gt;【参考方案4】:

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

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

【讨论】:

请注意,indeterminateTint 仅适用于 API 级别 21 及更高级别! 像害虫一样保持质量

以上是关于如何在 Android 上更改默认 ProgressBar 圆圈颜色的主要内容,如果未能解决你的问题,请参考以下文章

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

Xamarin。 WebView Progres

如何在Android的谷歌地图片段中更改默认的蓝色圆形位置图标?

如何更改qt android应用程序的默认应用程序图像

Android 如何更改默认 VideoView / MediaPlayer 全屏?

如何在 android 上更改浮动操作按钮 (FAB) 的形状?