Как установить индикатор прогресса Android в центре экрана

Я пытаюсь показать индикатор выполнения в центре экрана, но он не отображается в центре. Ниже мой макет. Что я здесь делаю неправильно? В основном это макет для отображения виджета и виджета 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>

Ответ 1

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"

Ответ 6

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

По моему опыту, когда мое приложение выросло, производительность пользовательского интерфейса с относительной компоновкой была хуже, закончилась переработкой на всех файлах макета: (Ниже приведен образец для размещения представления (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>