79

我想知道如何将不确定ProgressBar的颜色从基础白色/灰色更改为黑色?当我更改 时indeterminateDrawable,我得到一个静态图像而不是一个移动的动画进度条。有没有办法简单地在 XML 中做到这一点?

4

9 回答 9

84
progressBar.getIndeterminateDrawable().setColorFilter(
            getResources().getColor(Your_Color),
            android.graphics.PorterDuff.Mode.SRC_IN);

并将 Your_Color 替换为所需的颜色,例如: R.color.your_color_code

于 2015-04-04T21:20:27.027 回答
64

要在要在白色/浅色背景上使用的默认主题中获取 ProgressBar,请使用其中一种反向样式:

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

这通常会在透明的 ProgressBar 上为您提供黑色,但某些操作系统安装使用自定义资产。如果您正在寻找特定的颜色,则必须按照 CommonsWare 提供的说明滚动您自己的可绘制对象。

于 2010-11-10T14:14:12.783 回答
36

我看到其他答案已经很老了,为了更改不确定的 ProgressBar 颜色,您只需直接在 XML 中设置项目中的属性android:indeterminateTintandroid:indeterminateTintMode属性:ProgressBar

<ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:indeterminateTint="@color/colorPrimary"
    android:indeterminateTintMode="src_in"
    android:indeterminate="true" />

android:indeterminateTint- 应用于不确定进度指示器的色调。

必须是颜色值,格式为"#rgb", "#argb", "#rrggbb","#aarrggbb"或对资源的引用@color/colorPrimary

android:indeterminateTintMode- 用于应用进度指示器色调的混合模式。

必须是以下常量值之一:
add, multiply, screen, src_atop,src_insrc_over

这些属性的 Getter 和 Setter 方法是:

所有这些都是在API 级别 21中添加的

于 2016-09-02T08:23:24.760 回答
11

我制作了示例项目并在我的博客中发布。请看。http://www.hrupin.com/2011/09/21/how-to-make-custom-indeterminate-progressbar-in-android-or-how-to-change-progressbar-style-or-color

希望对你有帮助

于 2011-09-21T14:37:49.330 回答
6
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background" android:drawable="@drawable/bg" />
    <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/secondary" />
    <item android:id="@android:id/progress" android:drawable="@drawable/progress" />
</layer-list>
于 2012-03-05T09:42:21.960 回答
3

对于小于 23 的 API 使用

progressBar.getIndeterminateDrawable().setColorFilter(
       getResources().getColor(Your_Color),
        android.graphics.PorterDuff.Mode.SRC_IN);

否则使用

progressBar.getIndeterminateDrawable().setColorFilter(
        ContextCompat.getColor(context, Your_Color),
        android.graphics.PorterDuff.Mode.SRC_IN);
于 2018-02-11T06:52:53.473 回答
1

在您的 AppTheme 中覆盖android:colorControlActivated,它应该在您的 styles.xml 中:

<style name="AppTheme" parent="...">
    ...
    <item name="android:colorControlActivated">@color/beautiful_color</item>
    ...
</style>

适用于 API 21+

于 2018-11-07T22:25:54.433 回答
0

使用材料组件库,您可以使用CircularProgressIndicator以下属性:

  • indicatorColor
  • trackColor

就像是:

<com.google.android.material.progressindicator.CircularProgressIndicator
       android:indeterminate="true"
       app:trackColor="@color/red600Light"
       app:indicatorColor="@color/red600Dark"
       app:indicatorSize="50dp"
       .../>

在此处输入图像描述

您还可以使用多色不确定指示器。

<com.google.android.material.progressindicator.CircularProgressIndicator
            android:indeterminate="true"
            app:trackColor="@color/red600Light"
            app:indicatorColor="@array/progress_colors"
            app:indeterminateAnimationType="contiguous"/>

array/progress_colors

  <integer-array name="progress_colors">
    <item>@color/...</item>
    <item>@color/...</item>
    <item>@color/...</item>
  </integer-array>
于 2021-04-06T14:42:34.517 回答
-5

实际上,您需要做的所有事情(对于 cirle 和 bar)都是在 drawable 中创建一个 xml 文件,如下所示...... progress_spinner_001 指向您想要动画的任何图像和持续时间......您想要显示每个图像多长时间框架.......并设置你的 android:indeterminateDrawable= filename_in_drawable....

<?xml version="1.0" encoding="utf-8"?>
<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
<item android:drawable="@drawable/progress_spinner_001" android:duration="300" />
<item android:drawable="@drawable/progress_spinner_002" android:duration="300" />
<item android:drawable="@drawable/progress_spinner_003" android:duration="300" />
  <item android:drawable="@drawable/progress_spinner_004" android:duration="300" />
    <item android:drawable="@drawable/progress_spinner_005" android:duration="300" />
      <item android:drawable="@drawable/progress_spinner_006" android:duration="300" />
     <item android:drawable="@drawable/progress_spinner_007" android:duration="300" />
    <item android:drawable="@drawable/progress_spinner_008" android:duration="300" />
</animation-list>

ps 你可能需要调整进度条的大小以根据需要显示

于 2010-10-28T15:05:00.930 回答