Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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...http://i.stack.imgur.com/Ra5c6.png

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

like image 414
johnblanco Avatar asked Jun 06 '12 17:06

johnblanco


People also ask

How do I center my progress bar?

Just change your Layout as RelativeLayout and add android:layout_centerInParent="true" to your ProgressBar.

How do I make my progress bar horizontal Android?

In Android, by default a progress bar will be displayed as a spinning wheel but If we want it to be displayed as a horizontal bar then we need to use style attribute as horizontal. It mainly use the “android. widget. ProgressBar” class.


Video Answer


3 Answers

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.

like image 93
Machine Avatar answered Oct 06 '22 06:10

Machine


thats because you are using a LinearLayout, I suggest that you use a RelativeLayout and have the attibute center using layout_centerVertical like this:

<ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_centerVertical="true"
    android:id="@+id/preloader"
    style="@android:style/Widget.ProgressBar.Large"/>
like image 25
Raykud Avatar answered Oct 06 '22 06:10

Raykud


There seems some problem with what you are trying to do. ListView on top of progress bar in your layout can have a variable height depending on its contents. So, it's not possible to ensure progress bar stays in center of screen using linear layout.

You may want to look at ProgressDialog class that will show a progress dialog while you load data into list in background.

Alternatively, you can make ProgressBar and ListView overlap by using RelativeLayout as top level layout and specify android:layout_centerInParent="true" attribute for ProgressBar

like image 24
vivek.m Avatar answered Oct 06 '22 07:10

vivek.m