如何更改android不确定的ProgressBar颜色?

时间:2010-04-14 14:25:57

标签: android

我正在寻找一个非常明显的东西(在其他语言中!!)它让我疯狂!

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

谢谢!

9 个答案:

答案 0 :(得分:70)

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

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

答案 1 :(得分: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提供的说明滚动自己的绘图。

答案 2 :(得分:18)

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

<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的引用形式的颜色值。< / p>

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

  

必须是以下常数值之一:
  addmultiplyscreensrc_atopsrc_insrc_over

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

所有这些都已添加到API level 21

答案 3 :(得分:11)

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

希望,它可以帮助你

答案 4 :(得分:7)

<?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>

答案 5 :(得分:2)

对于少于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);

答案 6 :(得分:0)

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

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

在API 21+上工作

答案 7 :(得分:0)

通过 Material Component Library,您可以使用具有以下属性的 CircularProgressIndicator

  • indicatorColor
  • trackColor

类似于:

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

enter image description here

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

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

答案 8 :(得分:-4)

实际上你需要做的(对于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你可能需要调整进度条的大小以显示所需