为什么我的进度条没有垂直居中?

时间:2012-06-06 17:59:51

标签: android layout view alignment

我有以下布局......

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

它看起来像这样...... http://i.stack.imgur.com/Ra5c6.png

我希望预加载器也能垂直居中,出了什么问题?

5 个答案:

答案 0 :(得分:12)

不知何故,layout_gravity运行不正常。 您需要做的是将progress_bar嵌套在linear_layout中,并将该布局的重力设置为居中,如下所示:

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

我不建议将引力设置为最顶部的线性布局,因为如果更改列表或添加内容,可能会发生有趣的事情。

答案 1 :(得分:1)

那是因为您使用的是LinearLayout,我建议您使用RelativeLayout 并使用layout_centerVertical这样的attibute中心:

<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"/>

答案 2 :(得分:1)

您尝试做的事情似乎有些问题。布局中进度条顶部的ListView可以根据其内容具有可变高度。因此,无法使用线性布局确保进度条保持在屏幕中心。

在将数据加载到后台列表中时,您可能希望查看将显示进度对话框的ProgressDialog类。

或者,您可以使用RelativeLayout作为顶级布局来使ProgressBar和ListView重叠,并为ProgressBar指定android:layout_centerInParent="true"属性

答案 3 :(得分:0)

我不知道您的Listview占用了多少空间,但如果您想真正定义x项目的位置,则可能需要使用<RelativeLayout>代替<LinearLayout>

希望这有帮助。

答案 4 :(得分:0)

在您的父级LinearLayout中设置android:gravity="center"

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:gravity="center"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">