When is indeterminate progressbar coming to Android Support Library
Solution 1
Material Components Library
You can use the LinearProgressIndicator
with the android:indeterminate="true"
attribute:
<com.google.android.material.progressindicator.LinearProgressIndicator
android:indeterminate="true"
app:indicatorColor="?attr/colorPrimary"/>
You can also use different colors using:
<com.google.android.material.progressindicator.LinearProgressIndicator
android:indeterminate="true"
app:indicatorColor="@array/progress_colors"
app:indeterminateAnimationType="contiguous"/>
with:
<integer-array name="progress_colors">
<item>@color/...</item>
<item>@color/....</item>
<item>@color/....</item>
</integer-array>
You can also use the CircularProgressIndicator
component to have a circular progress indicator:
<com.google.android.material.progressindicator.CircularProgressIndicator
android:indeterminate="true"
app:indicatorColor="?attr/colorPrimary"/>
Note: It requires at least the version 1.3.0-alpha04
Jetpack compose
With 1.0.x
you can use the LinearProgressIndicator
or CircularProgressIndicator
// Indeterminate
CircularProgressIndicator()
LinearProgressIndicator()
// Determinate
CircularProgressIndicator(progress = ..)
LinearProgressIndicator(progress = ..)
Example:
var progress by remember { mutableStateOf(0.1f) }
LinearProgressIndicator(
backgroundColor = Color.White,
progress = progress,
color = Blue
)
AppCompat
You can use a ProgressBar
with an AppCompat style.
Just add this in your layout:
<ProgressBar
style="@style/Base.Widget.AppCompat.ProgressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="visible" />
If you would like an Horizontal progress bar use:
<ProgressBar
style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="8dp"
android:layout_marginTop="24dp"
android:indeterminate="true"
android:visibility="visible" />
They follow the official material guidelines.
Solution 2
This is an answer to an old question, but I figured fellow readers might be interested in this solution:
Newer versions (26.1.+) of the Support Library contain a class called CircularProgressDrawable
that implements the exact look of the native Material indeterminate drawable. In order to easily use this in a layout, you can build a MaterialProgressBar
like this:
public class MaterialProgressBar extends ProgressBar{
// Same dimensions as medium-sized native Material progress bar
private static final int RADIUS_DP = 16;
private static final int WIDTH_DP = 4;
public MaterialProgressView(Context context, AttributeSet attrs) {
super(context, attrs);
// The version range is more or less arbitrary - you might want to modify it
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP
|| Build.VERSION.SDK_INT > Build.VERSION_CODES.O_MR1) {
final DisplayMetrics metrics = getResources().getDisplayMetrics();
final float screenDensity = metrics.density;
CircularProgressDrawable drawable = new CircularProgressDrawable(context);
drawable.setColorSchemeColors(getResources().getColor(R.color.colorPrimary));
drawable.setCenterRadius(RADIUS_DP * screenDensity);
drawable.setStrokeWidth(WIDTH_DP * screenDensity);
setIndeterminateDrawable(drawable);
}
}
}
Joakim
Software engineer from Malmö working with app developent for a consultant agency. Field experience from Home automation and Finance. iOS > Android every day
Updated on August 26, 2021Comments
-
Joakim almost 3 years
My applications UI is built using the Android Support Library, but there is currently no AppCompat version of the (intederminate) progressbar, which my app really needs.
I would prefer to not use any third party libraries to achieve material design progressbars, so I'm wondering if anyone sits on information about why it's not included in the support library, and if there is any sign of it arriving (and when).
-
Mohammad over 8 yearsHow to use this as intederminate progressbar in action bar with webView?
-
Robert Baker over 8 yearsLike to add that this will not work for indeterminate circle bars. They lack the animated vector drawable.
-
Richard Le Mesurier over 8 years@Robert any hint how to do the same thing for indeterminate circles? This is one of the top results I could get to with my google-fu.
-
gnuf over 8 years@RichardLeMesurier You could try including this implementation, from Chromium. It doesn't make use of vector drawables: chromium.googlesource.com/android_tools/+/master/sdk/extras/…
-
Albert Vila Calvo over 7 yearsIf you want it centered on the screen, use
wrap_content
for both width and height, and addandroid:layout_gravity="center"
(assuming that you are using aFrameLayout
). -
BladeCoder over 7 yearsThis answer only describes how to use the platform's native progress bar. On pre-lollipop devices you'll end up with an untinted holo progress bar. This does not answer the question.
-
Pnemonic almost 6 yearsstyle="@style/Widget.AppCompat.ProgressBar.Horizontal"
-
tahaak67 over 3 yearsso it works on material 1.3 and up, and i was wondering why it gives me unresolved error the whole time