it-roy-ru.com

Когда неопределенный прогресс-бар приходит в библиотеку поддержки Android

Пользовательский интерфейс моих приложений построен с использованием библиотеки поддержки Android, но в настоящее время нет версии AppCompat (intederminate) индикатора выполнения, который действительно нужен моему приложению.

Я бы предпочел не использовать какие-либо сторонние библиотеки для достижения индикаторов проектирования материалов, поэтому мне интересно, если кто-нибудь расскажет, почему он не включен в библиотеку поддержки, и есть ли какие-либо признаки его поступления (и когда).

43
Joakim

Вы можете использовать ProgressBar со стилем AppCompat.

Просто добавьте это в свой макет:

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

Если вы хотите использовать горизонтальный индикатор выполнения:

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

Они следуют официальным материалам руководящие принципы

81
Gabriele Mariotti

Это ответ на старый вопрос, но я подумал, что другие читатели могут быть заинтересованы в этом решении:

Более новые версии (26.1. +) Библиотеки поддержки содержат класс с именем CircularProgressDrawable , который реализует точный внешний вид родного материала неопределенного рисования. Чтобы легко использовать это в макете, вы можете создать MaterialProgressBar, например:

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_

Я просто пытаюсь улучшить ответ г-на Габриэле Мариотти, используя стили.

  1. Напишите такой стиль

    <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. Используйте это с вашим индикатором прогресса, как это.

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