Progress indicator

Shows how far an operation has come, as a bar or a ring, flat or wavy.

When to use

Use a determinate indicator when you know the progress, and an indeterminate one when you only know that work is going on. The wavy shapes are the Expressive style. They suit longer waits where the user watches the screen.

Wavy indicators calm down to a straight line when the work ends and when the amplitude is zero.

Playground

The interactive page has a playground with live property controls for this component and generated code.

Examples

Linear

Flat, wavy and indeterminate.

Column(Modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(24.dp)) {
    LinearProgressIndicator(progress = { 0.4f }, modifier = Modifier.fillMaxWidth())
    LinearWavyProgressIndicator(progress = { 0.4f }, modifier = Modifier.fillMaxWidth())
    LinearWavyProgressIndicator(modifier = Modifier.fillMaxWidth())
}

Circular

Flat, wavy and indeterminate.

CircularProgressIndicator(progress = { 0.4f })
CircularWavyProgressIndicator(progress = { 0.4f })
CircularWavyProgressIndicator()

Parameters

NameTypeDefaultDescription
progress() -> FloatCurrent value from 0 to 1. Omit for indeterminate.
amplitudeFloat | (Float) -> Float1fWave height. Pass a lambda to shape it by progress.
wavelengthDpWavyProgressIndicatorDefaultsDistance between wave peaks.
color / trackColorColorindicatorColor / trackColorColors of the active part and the track.

Guidelines

Do:

Don't:

Accessibility

Related components