Search code examples
androidlayoutviewalignment

Why is my progress bar not centered vertically?


I have the following layout...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:background="@drawable/bg_generic_portrait">
  <ListView android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/issue_list_item_background_normal"
            android:listSelector="@drawable/issue_background_selector"
            android:divider="@drawable/separator"
    >
  </ListView>
  <ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:id="@+id/preloader"
    style="@android:style/Widget.ProgressBar.Large"/>

  <TextView android:id="@android:id/empty"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#FF0000"/>
</LinearLayout>

And it looks like this...https://i.sstatic.net/Ra5c6.png

I want the preloader to be centered vertically too, what is wrong?


Solution

  • Somehow the layout_gravity does not work well. What you need to do is nest the progress_bar in a linear_layout and set the gravity of that layout to center, like this:

    <LinearLayout android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:gravity="center">
    <ProgressBar
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:id="@+id/preloader"
              style="@android:style/Widget.ProgressBar.Large"/>
    </LinearLayout>
    

    I do not suggest setting the gravity to the topmost linear layout because you could have funny things happening if you change the list or add something.