как установить индикатор выполнения Android в центре экрана - PullRequest
13 голосов
/ 24 октября 2011

Я пытаюсь показать индикатор выполнения в центре экрана, но он не отображается в центре. Ниже мой макет. Что я здесь не так делаю? По сути, это макет для отображения изображения и виджета галереи Android сверху. Когда пользователь нажимает на миниатюры, я загружаю изображение из Интернета и хочу показать диалоговое окно прогресса во время загрузки изображения.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:id="@+id/container" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:orientation="vertical">

    <Gallery android:id="@+id/gallery" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:gravity="top" />

    <ImageView android:id="@+id/actualimage" android:scaleType="fitCenter"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:visibility="gone" android:layout_gravity="center_vertical|center_horizontal|center"
        android:adjustViewBounds="true" />

    <ProgressBar android:id="@+android:id/progress_small1"
        android:layout_height="wrap_content" android:layout_width="wrap_content"
        android:visibility="visible" android:layout_gravity="center_vertical|center_horizontal"
        android:gravity="center_vertical|center_horizontal" />

</LinearLayout>

Ответы [ 6 ]

39 голосов
/ 24 октября 2011

Использование LinearLayout будет складывать ваши представления вертикально.Прямо сейчас ваши ImageView и ProgressBar борются за центрированную позицию.Для такой ситуации я бы определенно рекомендовал RelativeLayout.

С RelativeLayout вы используете android:layout_centerInParent="true".

4 голосов
/ 24 октября 2011

Do android:gravity="center" в корне LinearLayout.Установите android:visibility всех других элементов, кроме ProgressBar на gone, когда вы хотите показать ProgressBar

3 голосов
/ 18 апреля 2013

Добавить следующее:

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
3 голосов
/ 24 октября 2011

Может быть, вам стоит перейти к диалогу прогресса, так как я полагаю, что вы пытаетесь показать индикатор прогресса, пока изображения не будут загружены в галерею.

Это поможет вам начать.

http://www.helloandroid.com/tutorials/using-threads-and-progressdialog

http://www.androidpeople.com/android-progress-dialog-example

И все же, если вы ищете способ использовать сам индикатор прогресса, то, возможно, вам следует попробоватьна ответ, предоставленный Брэдли Аффнером

2 голосов
/ 24 октября 2011

Попробуйте задать для индикатора выполнения значение layout_weight, равное 1

1 голос
/ 20 июля 2016

Я знаю, что на этот вопрос дан ответ, но, учитывая эффективность разметки представлений / подпредставлений, RelativeLayout стоит дорого (требуется два прохода). Если ваша иерархия представлений сложная, выберите «Относительный макет» или если ваш вид имеет просто простые представления, как показано ниже, перейдите к «Линейный макет / Макет фрейма».

Исходя из моего опыта, когда мое приложение росло, производительность пользовательского интерфейса с относительной компоновкой была в итоге переработана для всех файлов компоновки :( Ниже приведен пример размещения представления (в моем случае ProgressView) точно в центре обзора.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent" android:orientation="vertical">
    <android.support.v7.widget.AppCompatImageView android:layout_gravity="center"  android:layout_width="match_parent"
        android:layout_height="0dp" app:srcCompat="@drawable/check" android:scaleType="fitCenter"
        android:layout_weight=".7"/>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp" android:layout_weight=".3">
        <ProgressBar android:layout_gravity="center|center_horizontal" android:indeterminateTint="@color/textColorPrimary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:indeterminate="true"/>
    </FrameLayout>

</LinearLayout>
...