web-dev-qa-db-fra.com

Quand la barre de progression indéterminée arrive-t-elle dans la bibliothèque de support Android?

L'interface utilisateur de mes applications est construite à l'aide de la bibliothèque de support Android, mais il n'existe actuellement aucune version AppCompat de la barre de progression (intederminate), dont mon application a réellement besoin.

Je préférerais ne pas utiliser de bibliothèques tierces pour créer des barres de progression de la conception de matériel. Je me demande donc si quelqu'un souhaite savoir pourquoi il n'est pas inclus dans la bibliothèque de support, et s'il y a le moindre signe que cela arrive (et quand).

43
Joakim

Vous pouvez utiliser une ProgressBar avec un style AppCompat.

Ajoutez simplement ceci dans votre mise en page:

<ProgressBar
        style="@style/Base.Widget.AppCompat.ProgressBar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:indeterminate="true"
        Android:visibility="visible" />

Si vous souhaitez une barre de progression horizontale, utilisez:

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

Ils suivent le matériel officiel directives

81

C’est une réponse à une vieille question, mais j’ai pensé que d’autres lecteurs pourraient être intéressés par cette solution:

Les versions les plus récentes (26.1. +) De la bibliothèque de support contiennent une classe appelée CircularProgressDrawable qui implémente l'apparence exacte du matériau natif indéfinissable. Afin de l'utiliser facilement dans une mise en page, vous pouvez construire une MaterialProgressBar comme ceci:

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);
        }
    }
}
5
FD_

J'essaie simplement d'améliorer la réponse de M. Gabriele Mariotti en utilisant des styles.

  1. Écrire un style comme celui-ci

    <style name="infinite_progress_horizontal" parent="Widget.AppCompat.ProgressBar.Horizontal">
        <item name="Android:layout_width">match_parent</item>
        <item name="Android:layout_height">wrap_content</item>
        <item name="Android:indeterminate">true</item>
    </style>
    
  2. Utilisez-le avec votre barre de progression comme ceci.

    <ProgressBar style="@style/infinite_progress_horizontal" />
    
0
Rahul Raveendran