对齐 RelativeLayout 中的元素,其中一个是 center_horizontal

Aligning elements in a RelativeLayout such that one is center_horizontal

布局如下:

您可能会从上面的布局中注意到,外部布局是一个 RelativeLayout,其中所有元素都水平居中。此布局包含另一个布局,该布局也是 RelativeLayout 对一些元素进行分组。我希望这个组垂直居中。

现在的问题是关于内部 RL2 中显示的两个元素。它们基本上是一个按钮和一个进度条(圆形)。我希望按钮水平居中,进度条紧挨着它;即 progressBar.Left = button.Right + 10(仅供参考)。

过去几个小时我一直在想办法解决问题,但一无所获。 (另外,Android 上的布局设计非常新)。

如果我能提供更多帮助,请告诉我。


编辑:我尝试过的——

  1. 水平线性布局 -> 无法使按钮在线性布局中居中并调整进度条的补充边距。
  2. 相对布局 -> 无法在此处发生任何事情。

将按钮和进度条包裹在 Horizo​​ntal LinearLayout 中。根据我的经验,如果你开始嵌套它们,Relativelayout 会变得笨拙。

这是我针对此类要求的方法:

红色方块是不可见的 <Space> 元素,它们应该与您的进度条具有相同的 width/height。这也意味着您需要将每一行包裹在水平 LinearLayout 中,并将所有行包裹在垂直行中。

就效率而言,这可能并不理想。我认为一页或两页可以接受。

已更新@p0lAris 评论:

要使元素居中,您可以使用 layout_weight 属性 (= 100),并为 <Space><ProgressBar> 元素使用固定宽度。

这意味着按钮尽可能宽。

如果需要在 start/end 上进一步填充,可以将 padding 属性添加到包含所有按钮行的父布局。

我试图复制你想要的布局并想出了这个:

对我有用

    <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="50dp"
            android:padding="10dp"
            >

        <View
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="#FF5722"
                />

        <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                >

            <View
                    android:id="@+id/view1"
                    android:layout_width="150dp"
                    android:layout_height="50dp"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="50dp"
                    android:background="#0288D1"
                    />

            <View
                    android:id="@+id/centered"
                    android:layout_width="150dp"
                    android:layout_height="50dp"
                    android:layout_below="@id/view1"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="50dp"
                    android:background="#0288D1"
                    />

            <View
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_alignTop="@id/centered"
                    android:layout_marginLeft="10dp"
                    android:layout_toRightOf="@id/centered"
                    android:background="#B58105"
                    />

        </RelativeLayout>
    </RelativeLayout>