对齐 RelativeLayout 中的元素,其中一个是 center_horizontal
Aligning elements in a RelativeLayout such that one is center_horizontal
布局如下:
您可能会从上面的布局中注意到,外部布局是一个 RelativeLayout
,其中所有元素都水平居中。此布局包含另一个布局,该布局也是 RelativeLayout
对一些元素进行分组。我希望这个组垂直居中。
现在的问题是关于内部 RL2
中显示的两个元素。它们基本上是一个按钮和一个进度条(圆形)。我希望按钮水平居中,进度条紧挨着它;即 progressBar.Left = button.Right + 10
(仅供参考)。
过去几个小时我一直在想办法解决问题,但一无所获。 (另外,Android 上的布局设计非常新)。
如果我能提供更多帮助,请告诉我。
编辑:我尝试过的——
- 水平线性布局 -> 无法使按钮在线性布局中居中并调整进度条的补充边距。
- 相对布局 -> 无法在此处发生任何事情。
将按钮和进度条包裹在 Horizontal 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>
布局如下:
您可能会从上面的布局中注意到,外部布局是一个 RelativeLayout
,其中所有元素都水平居中。此布局包含另一个布局,该布局也是 RelativeLayout
对一些元素进行分组。我希望这个组垂直居中。
现在的问题是关于内部 RL2
中显示的两个元素。它们基本上是一个按钮和一个进度条(圆形)。我希望按钮水平居中,进度条紧挨着它;即 progressBar.Left = button.Right + 10
(仅供参考)。
过去几个小时我一直在想办法解决问题,但一无所获。 (另外,Android 上的布局设计非常新)。
如果我能提供更多帮助,请告诉我。
编辑:我尝试过的——
- 水平线性布局 -> 无法使按钮在线性布局中居中并调整进度条的补充边距。
- 相对布局 -> 无法在此处发生任何事情。
将按钮和进度条包裹在 Horizontal 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>