如何更改不确定进度条的颜色?

21

我有一个进度条,样式如下:style="?android:attr/android:progressBarStyleSmall"

不幸的是,这个进度条几乎是白色的,而且在我的情况下显示在白色背景上。进度条因此几乎看不见。

我该如何改变进度条的颜色?深灰色会更好。

7个回答

41
progressBar.getIndeterminateDrawable().setColorFilter(
            getResources().getColor(R.color.light_light_purple),
            android.graphics.PorterDuff.Mode.SRC_IN);

该代码将默认的holographic不确定进度条颜色更改为您自己的颜色。 定义您的颜色代码,并将R.color.light_light_purple替换为R.color.your_color_code


1
这真的应该成为被接受的答案。我最近才发现了颜色过滤器方法,基本上可以将任何东西更改为您想要的颜色,这非常棒。 - LukeWaggoner
非常感谢!请接受我的答案,以便更多人受益 :) - Vishal Pandey
我只需要在Lollipop版本之前的SDK版本中使用这个代码片段,所以我将它包装在一个静态方法中:LegacyStyleUtil#adjustLegacyStyle(Context, ProgressBar)。然后,我从我的活动/片段中调用此方法。public static void adjustLegacyStyle(Context context, ProgressBar progressBar) { if (BuildConfigUtil.isLegacySDK() && progressBar != null) { progressBar.getIndeterminateDrawable().setColorFilter( context.getResources().getColor(R.color.green_progress), PorterDuff.Mode.SRC_IN); } } - Andy H.
3
无法在较新的Android设备上运行,因为不确定进度条只是一个简单的圆形:它停止了旋转。 - Oliv

25

要获得黑色进度条,请使用其中一种反转样式:

<ProgressBar style="@android:style/Widget.ProgressBar.Inverse"/>
<ProgressBar style="@android:style/Widget.ProgressBar.Large.Inverse"/>
<ProgressBar style="@android:style/Widget.ProgressBar.Small.Inverse"/>

这在我们的一个Gingerbread模型上与Cyanogen无法正常工作。太糟糕了 :( - Henrique de Sousa

10
该条形图的颜色之所以如此,是因为您选择了相应的样式。这是一种固定的样式,并使用系统主题生成UI元素。
请查看这里的源代码。这个progressBarStyleSmall属性使用了这里定义的样式。
<style name="Widget.ProgressBar.Small">
    <item name="android:indeterminateDrawable">@android:drawable/progress_small_white</item>
    <item name="android:minWidth">16dip</item>
    <item name="android:maxWidth">16dip</item>
    <item name="android:minHeight">16dip</item>
    <item name="android:maxHeight">16dip</item>
</style>

只需按照来自Android源代码的示例创建自定义样式。您需要将android:indeterminateDrawable替换为您想要的内容。


3
public static void setColorOfProgressBar(ProgressBar mProgressBar, int mColor){
    mProgressBar.getIndeterminateDrawable().setColorFilter(mColor, android.graphics.PorterDuff.Mode.MULTIPLY);
}

2

我曾经尝试过改变进度条的颜色,但是遇到了很大的困难。为了解决这个问题,我获取了安卓源代码,并创建了自己的ProgressBar类。

虽然不是最好的解决方案,但对我来说起作用了。


5
你能否分享一下这个班级? - Arslan Anwar

2

1

注意,使用时

<ProgressBar style="@android:style/Widget.ProgressBar.Inverse"/> 

如果您想使用任何反向进度条,您必须将最低的Android SDK要求设置为4级(Android 1.6)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接