垂直居中进度条

时间:2014-10-28 04:47:46

标签: android

我在ProgressBar内有一个RelativeLayout和其他一些视图元素,我无法垂直居中显示进度条。我尝试了android:layout_centerVertical="true"android:layout_gravity="center_vertical"android:layout_gravity="center"android:gravity="center",但它不起作用!

这是我的布局:

<android.support.v4.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:id="@+id/swipe">
<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/activity_vertical_margin">

        <ProgressBar
            android:id="@+id/progressBar1"
            style="?android:attr/progressBarStyleLarge"
            android:visibility="visible"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:indeterminate="true" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Random number:"
            android:id="@+id/lbl" 
            android:visibility="gone" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/rndNum"
            android:layout_toRightOf="@id/lbl" 
            android:visibility="gone" />
    </RelativeLayout>
</ScrollView>

修改:但是,进度条水平居中。

更新:这是视图的呈现方式 enter image description here

5 个答案:

答案 0 :(得分:2)

请尝试这种方式,希望这有助于您解决问题。

如果您不想将RelativeLayout layout_height设置为match_parent,请将FrameLayout作为ScrollView的父布局,并将ProgressBar置于外侧RelativeLayout,如下所示。

<android.support.v4.widget.SwipeRefreshLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:id="@+id/swipe">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingTop="@dimen/activity_vertical_margin">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Random number:"
                    android:id="@+id/lbl"
                    android:visibility="gone" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/rndNum"
                    android:layout_toRightOf="@id/lbl"
                    android:visibility="gone" />
            </RelativeLayout>
        </ScrollView>
        <ProgressBar
            android:id="@+id/progressBar1"
            style="?android:attr/progressBarStyleLarge"
            android:visibility="visible"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:indeterminate="true" />
    </FrameLayout>
</android.support.v4.widget.SwipeRefreshLayout>

答案 1 :(得分:1)

由于您的ScrollView导致问题,您可以通过在RelativeLayout添加以下行来解决问题,

 android:layout_gravity="center"
 android:gravity="center"'

但我不确定你为什么要在ScrollView内垂直居中视图,如果ScrollView的内容超过屏幕尺寸,这将毫无价值。但这个答案肯定会符合你目前的目的。

答案 2 :(得分:0)

在RelativeLayout中使用 android:layout_centerInParent =&#34; true&#34; 来居中视图

  <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:visibility="visible"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_centerInParent="true"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:indeterminate="true" />

答案 3 :(得分:0)

为此,您必须使用Framelayout

答案 4 :(得分:0)

除其他答案外,请注意,如果您的progressBar的父视图或父视图或...是ScrollView,则上述layour_gravity,{{ 1}}和gravity将起作用。因此,您需要将ProgressBar放在center_in_parent之外。