Linear progress

Como se muestra en la documentación de Google sobre Material Design.

Un indicador linear progress siempre debe rellenarse de 0% a 100% y nunca decrecer en valor. Debería ser representado por barras en el borde de un encabezado u hoja que aparece y desaparece.

¿Cómo se añade?

I. En tu archivo build.gradle añade la última versión de la librería appcompat.

dependencies {  
    compile 'com.android.support:appcompat-v7:X.X.X' 
    // X.X.X eespecifica version
}

II. Haz que tu activity extienda de: android.support.v7.app.AppCompatActivity.

public class MainActivity extends AppCompatActivity {  
    ...
}

III. Declara tu ProgressBar dentro de cualquier fichero layout.xml.

<ProgressBar  
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

Progreso indeterminado

Para crear un ProgressBar indeterminado fija el atributo android:indeterminate a true.

<ProgressBar  
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:indeterminate="true"/>

Progreso determinado

I. Para crear un ProgressBar determinado fija el atributo android:indeterminate a false.

<ProgressBar  
    android:id="@+id/progressBar"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:indeterminate="false"
    android:max="100"
    android:progress="20"/>

Para especificar el máximo valor de progreso usa el atributo android:max. Por defecto es 100.

Para fijar la posición de progreso por defecto utiliza el atributo android:progress.

II. Para actualizar la posición del progreso utiliza el método setProgress(int progress) desde el hilo de interfaz gráfica.

ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);  
progressBar.setProgress(50);

Progreso con carga

I. Para crear un ProgressBar de carga fija utiliza el atributo android:indeterminate con valor false.

<ProgressBar  
    android:id="@+id/progressBar"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:indeterminate="false"
    android:max="100"
    android:progress="10"
    android:secondaryProgress="50"/>

Para fijar el valor de carga por defecto utiliza el atributo android:secondaryProgress.

II. Para actualizar la posición de carga utiliza el método setSecondaryProgress(int progress).

ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);

// Configura el progreso actual
progressBar.setProgress(20);

// Configura el progreso secundario (buffer)
progressBar.setSecondaryProgress(50);  

Indeterminado y determinado

Para crear un ProgressBar indeterminado fija el atributo android:indeterminate a true.

<ProgressBar  
    android:id="@+id/progressBar"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:indeterminate="true"/>

Cuando necesites cambiar el progreso de indeterminado a determinado utiliza el método setIndeterminate(boolean indeterminate).

ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);  
progressBar.setIndeterminate(false);

¿Cómo modificar el estilo?

I. Declara tu fichero de estilos personalizado values-v21/styles.xml.

<style name="LinearProgress" parent="Theme.AppCompat.Light">  
    <item name="colorAccent">@color/indigo</item>
    <item name="android:progressBackgroundTint">@color/pink</item>
</style>  

II. Aplica este estilo a tu ProgressBar mediante el atributo android:theme.

<ProgressBar  
    android:theme="@style/LinearProgress"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

Nota: el atributo android:progressBackgroundTint solo funciona con ProgressBar determinadas.

Problemas de compatibilidad

ProgressBar no se visualiza en estilo material en dispositivos pre Lollipop.

Escrito originalmente por Yakiv Mospan en MaterialDoc