我想知道如何将不确定的ProgressBar
颜色从基础白色/灰色变为黑色?当更改时indeterminateDrawable
,我得到的是静态图像,而不是移动的动画progressBar。有什么方法可以简单地用XML做到吗?
Answers:
progressBar.getIndeterminateDrawable().setColorFilter(
getResources().getColor(Your_Color),
android.graphics.PorterDuff.Mode.SRC_IN);
并用所需的颜色替换Your_Color,例如:R.color.your_color_code
android:indeterminateTint="@colors/your_color"
android:indeterminateTintMode="src_in"
要在白色/浅色背景上使用的默认主题中获得一个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上变黑,但是某些OS安装使用自定义资产。如果要查找特定的颜色,则必须按照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中添加
<?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);
覆盖android:colorControlActivated
应该位于您的styles.xml中的AppTheme:
<style name="AppTheme" parent="...">
...
<item name="android:colorControlActivated">@color/beautiful_color</item>
...
</style>
适用于API 21+
实际上,您需要做的所有事情(对于圆管和条形)都是在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你可能需要调整进度条的大小以按需要显示