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