webentwicklung-frage-antwort-db.com.de

Wann ist ein unbestimmtes Fortschrittsbalken für die Android Support Library

Die Benutzeroberfläche für meine Anwendungen wurde mit der Android Support Library erstellt. Derzeit ist jedoch keine AppCompat-Version der (intederminate) Fortschrittsleiste vorhanden, die meine App wirklich benötigt.

Ich würde es vorziehen, keine Drittanbieter-Bibliotheken zu verwenden, um Fortschrittsbalken für das Materialdesign zu erhalten. Daher frage ich mich, ob jemand Informationen darüber erhält, warum er nicht in der Support-Bibliothek enthalten ist und ob Anzeichen dafür vorliegen (und wann).

43
Joakim

Sie können eine ProgressBar mit einem AppCompat - Stil verwenden.

Fügen Sie dies einfach in Ihr Layout ein:

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

Wenn Sie eine horizontale Fortschrittsleiste wünschen, verwenden Sie:

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

Sie folgen dem offiziellen Material Richtlinien

81

Dies ist eine Antwort auf eine alte Frage, aber ich dachte, andere Leser könnten an dieser Lösung interessiert sein:

Neuere Versionen (26.1. +) Der Support Library enthalten eine Klasse mit dem Namen CircularProgressDrawable , die das exakte Aussehen des nativen Materials unbestimmt zeichnerisch implementiert. Um dies einfach in einem Layout zu verwenden, können Sie eine MaterialProgressBar wie folgt erstellen:

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_

Ich versuche nur, die Antwort von Herrn Gabriele Mariotti mit Stilen zu verbessern.

  1. Schreibe einen Stil wie diesen

    <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. Verwenden Sie es mit Ihrer Fortschrittsleiste so.

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