36 个答案:
答案 0 :(得分:439)
对于水平ProgressBar,您也可以使用ColorFilter,如下所示:
progressBar.getProgressDrawable().setColorFilter(
Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);
注意:这会修改应用中所有进度条的外观。要仅修改一个特定的进度条,请执行以下操作:
Drawable progressDrawable = progressBar.getProgressDrawable().mutate();
progressDrawable.setColorFilter(Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);
progressBar.setProgressDrawable(progressDrawable);
如果progressBar不确定,请使用getIndeterminateDrawable()代替getProgressDrawable()。
自Lollipop(API 21)起,您可以设置进度色调:
progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));
答案 1 :(得分:266)
我很抱歉这不是答案,但是什么推动了从代码设置它的要求?
如果正确定义,.setProgressDrawable应该可以正常工作
android:startColor="#ff9d9e9d"
android:centerColor="#ff5a5d5a"
android:centerY="0.75"
android:endColor="#ff747674"
android:angle="270"
/>
android:startColor="#80ffd300"
android:centerColor="#80ffb600"
android:centerY="0.75"
android:endColor="#a0ffcb00"
android:angle="270"
/>
android:radius="5dip" />
android:startColor="@color/progress_start"
android:endColor="@color/progress_end"
android:angle="270"
/>
答案 2 :(得分:261)
这不是编程方式,但我认为它可以帮助很多人!
我尝试了很多,最有效的方法是将这些行添加到.xml文件中的ProgressBar中:
android:indeterminate="true"
android:indeterminateTintMode="src_atop"
android:indeterminateTint="@color/secondary"
所以最后这段代码为我做了:
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginTop="50dp"
android:layout_marginBottom="50dp"
android:visibility="visible"
android:indeterminate="true"
android:indeterminateTintMode="src_atop"
android:indeterminateTint="@color/secondary">
此解决方案适用于API 21 +
答案 3 :(得分:217)
对于我的不确定进度条(微调器),我只是在drawable上设置了一个颜色过滤器。效果很好而且只有一条线。
将颜色设置为红色的示例:
ProgressBar spinner = new android.widget.ProgressBar(
context,
null,
android.R.attr.progressBarStyle);
spinner.getIndeterminateDrawable().setColorFilter(0xFFFF0000, android.graphics.PorterDuff.Mode.MULTIPLY);
答案 4 :(得分:155)
这是一个老问题,但这里没有提到使用主题。如果您的默认主题使用的是AppCompat,那么您的ProgressBar颜色将为您定义的colorAccent。
更改colorAccent也会改变您的ProgressBar颜色,但这些变化也会反映在多个地方。因此,如果您只想为特定PregressBar设置不同的颜色,则可以通过将主题应用于ProgressBar来实现此目的:
扩展您的默认主题并覆盖colorAccent
@color/white
在ProgressBar中添加android:theme属性:
android:theme="@style/AppTheme.WhiteAccent"
所以它看起来像这样:
android:id="@+id/loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="10dp"
android:theme="@style/AppTheme.WhiteAccent" />
因此,您只需更改特定colorAccent的{{1}}。
答案 5 :(得分:34)
根据一些建议,您可以指定一个形状并使用颜色进行剪裁,然后进行设置。我以编程方式工作。我就是这样做的。
首先确保导入可绘制的库..
import android.graphics.drawable.*;
然后使用类似于下面的代码;
ProgressBar pg = (ProgressBar)row.findViewById(R.id.progress);
final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 };
pgDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null,null));
String MyColor = "#FF00FF";
pgDrawable.getPaint().setColor(Color.parseColor(MyColor));
ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
pg.setProgressDrawable(progress);
pg.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal));
pg.setProgress(45);
答案 6 :(得分:32)
所有API
如果使用所有API,只需以样式创建主题
style.xml
//...
@color/blue
并在使用中
...
android:theme