как установить индикатор выполнения Android в центре экрана

#android #layout #progress-bar

#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:

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

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

Ответ №2:

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

Комментарии:

1. Спасибо за ваши комментарии. Я пробовал это, но мне все еще нужно было отобразить AdMob AdView, чтобы он не работал как ожидалось.

2. Это должно ответить на заголовок вопроса

Ответ №3:

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

Комментарии:

1. В этом вопросе придется согласиться с Андро Сельвой. С диалогом выполнения будет намного проще работать.

2. Спасибо за ваши комментарии. Думал, я обновлю то, что я пытался добавить layout_weight. По какой-то причине он увеличил размер панели прогресса до уродливого вращения пиксельного колеса. я думаю, layout_weight больше относится к соотношению пространства экрана, которое должно быть выделено между представлениями, чем к их размещению.

Ответ №4:

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

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

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

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

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

Ответ №5:

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

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

Ответ №6:

Я знаю, что на этот вопрос дан ответ, но, учитывая производительность размещения представлений / подвидов, 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>