How to change progress bar's progress color in Android How to change progress bar's progress color in Android android android

How to change progress bar's progress color in Android


For a horizontal ProgressBar, you can use a ColorFilter, too, like this:

progressBar.getProgressDrawable().setColorFilter(    Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);

Red ProgressBar using color filter

Note: This modifies the appearance of all progress bars in your app. To only modify one specific progress bar, do this:

Drawable progressDrawable = progressBar.getProgressDrawable().mutate();progressDrawable.setColorFilter(Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);progressBar.setProgressDrawable(progressDrawable);

If progressBar is indeterminate then use getIndeterminateDrawable() instead of getProgressDrawable().

Since Lollipop (API 21) you can set a progress tint:

progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));

Red ProgressBar using progress tint


This is not programmatically but I think it could help a lot of people anyway.
I tried a lot and the most efficient way was to add this lines to my ProgressBar in the .xml File:

            android:indeterminate="true"            android:indeterminateTintMode="src_atop"            android:indeterminateTint="@color/secondary"

So in the end this code did it for me:

<ProgressBar            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">

This solution works for API 21+


I'm sorry that it's not the answer, but what's driving the requirement setting it from code ?And .setProgressDrawable should work if it's defined correctly

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@android:id/background">    <shape>        <corners android:radius="5dip" />        <gradient                android:startColor="#ff9d9e9d"                android:centerColor="#ff5a5d5a"                android:centerY="0.75"                android:endColor="#ff747674"                android:angle="270"        />    </shape></item><item android:id="@android:id/secondaryProgress">    <clip>        <shape>            <corners android:radius="5dip" />            <gradient                    android:startColor="#80ffd300"                    android:centerColor="#80ffb600"                    android:centerY="0.75"                    android:endColor="#a0ffcb00"                    android:angle="270"            />        </shape>    </clip></item><item android:id="@android:id/progress">    <clip>        <shape>            <corners                android:radius="5dip" />            <gradient                android:startColor="@color/progress_start"                android:endColor="@color/progress_end"                android:angle="270"             />        </shape>    </clip></item></layer-list>