我想知道如何将不确定ProgressBar
的颜色从基础白色/灰色更改为黑色?当我更改 时indeterminateDrawable
,我得到一个静态图像而不是一个移动的动画进度条。有没有办法简单地在 XML 中做到这一点?
9 回答
progressBar.getIndeterminateDrawable().setColorFilter(
getResources().getColor(Your_Color),
android.graphics.PorterDuff.Mode.SRC_IN);
并将 Your_Color 替换为所需的颜色,例如: R.color.your_color_code
要在要在白色/浅色背景上使用的默认主题中获取 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 提供的说明滚动您自己的可绘制对象。
我看到其他答案已经很老了,为了更改不确定的 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
。
android:indeterminateTintMode
- 用于应用进度指示器色调的混合模式。
必须是以下常量值之一:
add
,multiply
,screen
,src_atop
,src_in
或src_over
这些属性的 Getter 和 Setter 方法是:
getIndeterminateTintList()
getIndeterminateTintMode()
setIndeterminateTintList(ColorStateList tint)
setIndeterminateTintMode(PorterDuff.Mode tintMode)
所有这些都是在API 级别 21中添加的
我制作了示例项目并在我的博客中发布。请看。http://www.hrupin.com/2011/09/21/how-to-make-custom-indeterminate-progressbar-in-android-or-how-to-change-progressbar-style-or-color
希望对你有帮助
<?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>
对于小于 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);
在您的 AppTheme 中覆盖android:colorControlActivated
,它应该在您的 styles.xml 中:
<style name="AppTheme" parent="...">
...
<item name="android:colorControlActivated">@color/beautiful_color</item>
...
</style>
适用于 API 21+
使用材料组件库,您可以使用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>
实际上,您需要做的所有事情(对于 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 你可能需要调整进度条的大小以根据需要显示