我正在寻找一个非常明显的东西(在其他语言中!!)它让我疯狂!
我想知道如何将不确定的ProgressBar颜色从基础白/灰色变为黑色?当我更改indeterminateDrawable时,我得到的是静态图像而不是移动的动画progressBar。有没有办法简单地在xml中做到这一点?
谢谢!
答案 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: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
的引用形式的颜色值。< / p>
android:indeterminateTintMode
- 用于应用进度指示器色调的混合模式。
必须是以下常数值之一:
add
,multiply
,screen
,src_atop
,src_in
或src_over
这些属性的Getter和Setter方法是:
getIndeterminateTintList()
getIndeterminateTintMode()
setIndeterminateTintList(ColorStateList tint)
setIndeterminateTintMode(PorterDuff.Mode tintMode)
所有这些都已添加到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"
.../>
您也可以使用多色不确定指示器。
<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你可能需要调整进度条的大小以显示所需