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

mwa*_*mwa 69 android android-progressbar

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

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

谢谢 !

Zey*_*sem 75

progressBar.getIndeterminateDrawable().setColorFilter(
            getResources().getColor(Your_Color),
            android.graphics.PorterDuff.Mode.SRC_IN);
Run Code Online (Sandbox Code Playgroud)

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

  • 可以在xml中定义:`android:indeterminateTint ="@ colors/your_color"``android:indeterminateTintMode ="src_in"` (12认同)
  • @zhaoyuanjie android:indeterminateTint仅适用于API级别21+ (2认同)

Anm*_*Anm 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"/>
Run Code Online (Sandbox Code Playgroud)

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


Cli*_*ton 26

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

<ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:indeterminateTint="@color/colorPrimary"
    android:indeterminateTintMode="src_in"
    android:indeterminate="true" />
Run Code Online (Sandbox Code Playgroud)

android:indeterminateTint - 适用于不确定进度指标的色调.

必须是一个颜色值,在形式"#rgb","#argb","#rrggbb","#aarrggbb",或对资源的引用@color/colorPrimary.

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

必须是以下常量之一:
add,multiply,screen,src_atop,src_in或者src_over

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

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

  • 太令人沮丧了!在 android studio 中,您必须使用“查看所有属性”选项来访问 inminatedTintMode,然后将其更改为 src_in...我不会自己解决这个问题。谢谢! (2认同)

ihr*_*pin 11

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

希望,它对你有所帮助


and*_*low 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>
Run Code Online (Sandbox Code Playgroud)


小智 -5

实际上你需要做的就是在drawable中创建一个xml文件,如下所示......progress_spinner_001指向你想要动画的任何图像和持续时间......你想要显示每个图像多长时间框架......并设置你的 android:inminatedDrawable= 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>
Run Code Online (Sandbox Code Playgroud)

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

  • -1:这个答案说“如下所示”,但它什么也没显示。我觉得很难理解。 (4认同)